=== SafeAlt – AI Alt Text Generator & Image SEO ===
Contributors: zmlabsnet
Tags: alt text, image seo, accessibility, ai, media library
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.4.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AI alt text generator: SafeAlt writes the alt text, title and caption of your images on EU servers. No big tech AI, no reuse of your data.

== Description ==

SafeAlt describes the images of your media library: it looks at each image and writes its alternative text, title, caption and description, in the language of your content.

**Your data stays yours.**

* **No big tech.** Your images and texts are never sent to OpenAI, Google, Microsoft, Amazon or Meta: the analysis models run on servers operated by ZM Labs, located in the European Union.
* **No reuse.** Your images are only used to describe them: never to train a model, never sold or shared.
* **Deleted after analysis.** Images are reduced and stripped of their metadata (EXIF, GPS) before leaving your site, then deleted by the service as soon as they are analysed.
* **Minimal logs.** No image, no text and no data about your visitors in the service logs. The written texts are erased from the service after 30 days.

**What it does**

* **No API key, nothing to configure.** No OpenAI, Google or other AI account to create or pay for: the AI is included. Connect the site in one click and you are done.
* **Works in the background.** New images are described as soon as they are uploaded, without anyone visiting the site and without a cron job to set up.
* **Faithful alt texts.** The alt text only describes what the image shows. Guesses, invented places and brands are detected and removed automatically; a doubtful result is flagged "to review" and never applied on its own.
* **Empty fields are filled in automatically.** One click on **Reset** restores what was there before.
* **Nothing written by a person is overwritten.** For fields that already have a value, SafeAlt proposes a replacement: edit it, accept it, keep the current value, or regenerate. A manual mode asks before every change.
* **Whole media library.** Pick existing images in a grid (or all those without alt text in one click); they are processed in the background, after new uploads.
* **Works with** Polylang, WPML, WooCommerce, Yoast SEO and Rank Math (language and main category are taken into account).
* **WP-CLI:** `wp safealt enqueue`, `wp safealt pump --loop`, `wp safealt status`, `wp safealt apply`.

**Pricing.** SafeAlt is a service: the free plan describes 25 images per month on one site, with no credit card. Paid plans (500 to 10,000 images per month, 1 to 25 sites) can be subscribed from the plugin. Details: [zmlabs.net/plugins/safealt](https://zmlabs.net/plugins/safealt/).

== External services ==

**SafeAlt service (ZM Labs).** The descriptions are written by the SafeAlt service, operated by ZM Labs on servers in the European Union (`https://api.safealt.zmlabs.net`). Nothing is sent before an administrator connects the site and accepts that images are sent for description.

* When connecting: the site address and the contact email entered (required; used to link a purchase to the site and to contact you about the service, never for marketing).
* For each image to describe: a reduced copy of the image without its metadata (EXIF, GPS), the title and main category of the page it belongs to, the business description you entered, the site name and tagline, a cleaned file name and the language wanted.
* The service then calls back your site (`/wp-json/safealt/v1/wake`, signed request, no data) when the texts are ready, and the plugin fetches them.
* Images are deleted as soon as they are analysed; texts and context are deleted after 30 days.

Terms of service: https://zmlabs.net/conditions-utilisation-licence/ — Privacy policy: https://zmlabs.net/politique-de-confidentialite/

**Freemius (payments).** Only when an administrator clicks to subscribe to a paid plan, the plugin loads the Freemius checkout (`https://checkout.freemius.com`), with the administrator's email address pre-filled. Freemius processes the payment, the VAT and the invoice. No data from your site is sent to Freemius otherwise.

Freemius terms: https://freemius.com/terms/ — Freemius privacy policy: https://freemius.com/privacy/

== Screenshots ==

1. The image grid: pick the images without alt text and describe them in the background.
2. An image filled in automatically: alt text, title, caption and description, with a Reset link.
3. The dashboard: queue, quota and connection status.
4. The settings: fields to fill, alt text length, minimum image size.

== Installation ==

1. Upload the plugin and activate it.
2. Open the **SafeAlt** menu and click **Connect my site**.
3. New images are described automatically. To process existing images, open **SafeAlt → Images**, tab **Without alt text**, select images and click **Describe the selection**.

No cron job to set up: the service wakes your site up as soon as the texts are ready, even on low-traffic sites.

== Frequently Asked Questions ==

= How long does it take? =

Each image is really looked at: new uploads are usually described within minutes. A first run on several thousand images is processed in the background and can take a day or more; you can leave the page, it keeps going.

= Will it replace my existing alt texts? =

No. A field that already has a value is never overwritten automatically: SafeAlt proposes a replacement that you accept or not.

= Can I undo? =

Yes. Click **Reset** on the image (media library or history) to restore the values from before SafeAlt.

= Are my images used to train an AI? =

No. Your images are only used to describe them. They are processed by models run on servers operated by ZM Labs in the European Union, never sent to a big tech AI provider, never used for training, never sold or shared. Each image is deleted as soon as it is analysed, and the texts written are erased from the service after 30 days.

= Which image formats? =

JPEG, PNG, WebP, AVIF and GIF (first frame). AVIF requires Imagick or GD with AVIF support on your hosting; the plugin tells you when it is missing. Images smaller than 300 pixels on their shortest side (icons, decorations) are ignored; the threshold is adjustable.

= Which languages? =

German, English, Spanish, French, Italian, Dutch and Portuguese. Each image is described in the language of the content it belongs to (Polylang, WPML), otherwise in the language of the site. For any other language, texts are written in English.

= Do I need an API key? =

No. There is no AI account to create and no API key to enter: the service is included, you only connect your site.

== Changelog ==

= 0.4.6 =
* The SafeAlt menu now sits after the WordPress menus instead of right below Media.
* Notices from WordPress and other plugins are shown again on the SafeAlt screens; SafeAlt's own notices only appear on the Dashboard, Media and Plugins screens.
* Translations are now delivered by translate.wordpress.org instead of being bundled.
* Stricter input sanitization and permission checks.
* Fixed: backslashes typed in an alt text were removed when it was applied or reset.

= 0.4.5 =
* Fixes reported by Plugin Check (translations, nonce checks, input sanitization).
* The takeover of MetaVision Alt SEO installations is removed: every site concerned has been updated.

= 0.4.4 =
* A contact email is now required to connect a site: it links a purchase made on zmlabs.net to your site.

= 0.4.3 =
* SafeAlt screens no longer show the banners of other plugins and themes.
* The WooCommerce placeholder image is never described (it would use your quota for nothing).
* Exact singular and plural in the image grid (“1 image selected”).

= 0.4.2 =
* SafeAlt now has its own entry in the WordPress menu, right below Media. Old links still work.

= 0.4.1 =
* Image grid: new “Waiting to be processed” tab, and tab counters updated live.
* The monthly quota shown is refreshed as soon as an image is described.

= 0.4.0 =
* MetaVision Alt SEO is now SafeAlt. Installing SafeAlt takes over the settings, connection, queue and history of MetaVision Alt SEO, then deactivates it: you can delete it.

= 0.3.1 =
* Fixed: the plugin screens could appear without their layout (and the Describe button stay disabled) when another plugin changes the Media menu.
* Image grid: three larger images per row, sharper thumbnails.

= 0.3.0 =
* Plans: subscribe from WordPress (secure payment by Freemius), plan activated automatically, prices excluding VAT shown, test mode for designated websites.
* Free plan: 25 images per month.
* Image grid: images that cannot be processed at the bottom, accurate counters, live updates, shift-click selection.
* Styles and scripts always reloaded after an update.

= 0.2.0 =
* Processing in the background: the service wakes the site as soon as images are ready, no cron needed.
* Setup assistant, image picker grid, AVIF and GIF support.
* Empty fields filled automatically with Reset; replacements proposed for fields that already have a value; the title never asks for your attention.
* Texts in the language of the content (German, English, Spanish, French, Italian, Dutch, Portuguese), English for any other language.
* Privacy: minimal logs, texts erased from the service after 30 days.

= 0.1.0 =
* First beta version.
