=== AltTide - AI Alt Text Generator & Image SEO ===
Contributors: shorezella
Tags: alt text, image seo, accessibility, alt text generator, bulk
Requires at least: 5.6
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Bulk-generate SEO and accessibility image alt text with your own OpenAI, Claude or Gemini key. Multi-provider, multilingual, no per-image fees.

== Description ==

**AltTide - AI Alt Text & Image SEO** writes accurate, descriptive image **alt text** for your whole media library, great for **accessibility** (screen readers, WCAG, the EU Accessibility Act) and for **image SEO**. Bring your own API key and pick the AI you trust: **OpenAI (GPT), Anthropic Claude, or Google Gemini**.

Unlike credit-based tools, there are **no per-image fees**. You use your own provider key, so bulk-fixing a whole library costs only what your provider charges (often a fraction of a cent per image).

= What you get (free) =

* **AI alt text generation** with **three providers**: OpenAI GPT, Claude, and Gemini (choose per site; pick a model from the current list or enter any newer one, with a link to each provider's model page)
* **Bulk generate** alt text for every image missing it, processed one at a time so your provider account is never hammered
* **Regenerate on demand**: a "Has alt text" view lets you hand-pick images that already have alt text and regenerate them with your current provider and model, for example after switching models
* **Generate on upload**, so new images get alt text automatically
* **Media dashboard** with a coverage score, a "missing alt text" list, a "has alt text" list, and a per-image **Generate** button
* **"Generate with AI"** and **"Use filename"** buttons right inside the media modal and the attachment editor
* **Safer key handling**: each provider key is masked on reload, with an eye button to reveal it and a one-click delete
* **SEO focus-keyphrase integration** that reads the keyphrase from **Yoast, Rank Math, All in One SEO and SEOPress** to steer generation
* **Multilingual**: auto-detects the page language or write in a language you choose
* **Image metadata**: optionally also generate each image's **title, caption and description** (standard WordPress attachment fields) in the same pass
* **Mark images as decorative** (WCAG): give logos, dividers and spacers an empty alt so screen readers skip them; decorative images are left out of the missing count and skipped by generation
* **SEO-friendly file names**: optionally rename new uploads from their generated alt text, so `IMG_4821.jpg` becomes `blue-ceramic-vase.jpg`. New uploads only, so no existing URL can break
* **Activity log**: an in-dashboard feed of what AltTide did (alt text, metadata, file renames, decorative marks), with one-click clear
* **Non-AI quick fill** from the filename, brand-casing preservation, WP-CLI, multisite compatible

= Pro =

OpenGraph image meta; WooCommerce product-image context (name, category, attributes); scheduled bulk runs; brand-voice templates; per-image SEO scores; and agency multi-site management. Learn more at shorezella.com.

Your API keys are stored in your own database and sent only to the provider you choose. This plugin is not affiliated with OpenAI, Anthropic or Google.

== External services ==

This plugin generates text by calling the AI provider **you** configure. No request is made until you enter an API key and start a generation, and only the one provider you select is contacted.

What is sent: the image (or its URL) you are generating for, a short text prompt built from the image context (such as the attached post title and focus keyphrase), and your API key for that provider. Nothing is sent to ShoreZella.

The provider you choose, and its terms and privacy policy:

* **OpenAI** (api.openai.com) - Terms: https://openai.com/policies/terms-of-use - Privacy: https://openai.com/policies/privacy-policy
* **Anthropic (Claude)** (api.anthropic.com) - Terms: https://www.anthropic.com/legal/commercial-terms - Privacy: https://www.anthropic.com/legal/privacy
* **Google Gemini** (generativelanguage.googleapis.com) - Terms: https://ai.google.dev/gemini-api/terms - Privacy: https://policies.google.com/privacy

The "Our plugins" screen shows other plugins we make. To build that list it makes two read-only catalog requests, only when you open that screen, and caches the result: one to WordPress.org (api.wordpress.org, the same directory WordPress itself uses) for our free plugins, and one to the ShoreZella store (shorezella.com) for our paid add-ons. No information about your site is sent in either request; they only fetch a public product list.

* **ShoreZella** (shorezella.com) - Terms: https://shorezella.com/terms/ - Privacy: https://shorezella.com/privacy-policy/

Fonts and scripts are bundled with the plugin and loaded locally, so the plugin itself makes no other outside requests.

== Installation ==

1. Upload the plugin to `/wp-content/plugins/` and activate it, or install it from Plugins → Add New.
2. Go to **AltTide → Providers** and paste an API key for OpenAI, Claude, or Gemini, then click **Test**.
3. Open **AltTide → Dashboard** and click **Generate all missing**, or generate per image.

== Frequently Asked Questions ==

= Do I need an API key? =
Yes. This is a bring-your-own-key (BYOK) plugin, so add your own OpenAI, Claude, or Gemini key. There are no per-image fees from us; you pay only your provider's usage.

= Which image types are supported? =
JPG, PNG, WebP and GIF.

= Will it overwrite alt text I already wrote? =
No. By default it only fills images that are missing alt text. If you do want to redo images that already have alt text (for example after changing your AI model), open the dashboard's "Has alt text" view, select the images, and click "Regenerate selected". You can also enable automatic overwrite in Settings.

= I changed my AI model. Can I redo images I already generated? =
Yes. On the dashboard, switch to the "Has alt text" view, tick the images you want, and click "Regenerate selected". They are re-run one at a time with your current provider and model, overwriting the old text. Individual images also have a "Regenerate" button.

= Does it work with WooCommerce? =
Basic images work in the free version. Product-image context (name, category, attributes) is a Pro feature.

= What is a decorative image? =
A purely decorative image (a divider, a spacer, a background flourish, sometimes a logo) adds nothing for a screen-reader user, so accessibility guidelines say it should have an EMPTY alt attribute rather than a description. Use the "Decorative" action on the dashboard, or the checkbox in the attachment editor, to mark such images. They then get an empty alt, drop out of the "missing alt text" count, and are skipped when you generate.

= Does it change my images? =
It never edits image content, and by default it does not touch your files at all: it only writes the standard WordPress alt text, title, caption and description fields. The one exception is opt-in: if you turn on "Rename files on upload", newly uploaded files are renamed for SEO. That setting is off by default.

= Is renaming files safe? =
Yes, because it only ever applies to a brand-new upload, within seconds of the file landing and before it can be placed in any post. Images already in your media library are never renamed, so no published URL, feed, sitemap or cache entry can break. WordPress metadata and every generated thumbnail size are updated together with the main file.

= Why rename image files at all? =
Search engines read the file name as a ranking signal for image search. A camera name like `IMG_4821.jpg` tells Google nothing, while `blue-ceramic-vase.jpg` describes the image. The plugin reuses the alt text it just generated, so the name matches the picture.

== Changelog ==

= 1.0.0 =
* Initial release.
