=== Antradus AI Lite — AI SEO Content Writer & Image Creator ===
Contributors: ehabahmad
Tags: ai, content generator, openai, seo, image generation
Requires at least: 5.8
Tested up to: 7.1
Stable tag: 2.15.1
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Free AI article writer for WordPress: complete SEO-optimized articles and AI featured images from a keyword or URL, inside the editor. OpenAI, Claude, Gemini, OpenRouter & DeepSeek — your own API key.

== Description ==

**Antradus AI Lite** writes complete, SEO-optimized articles with a matching AI featured image — right inside the WordPress post editor, using your own AI provider key. No middleman, no per-word fees: bring your OpenAI, Anthropic (Claude), Google Gemini, OpenRouter, or DeepSeek key and start writing.

Describe your topic, pick a writing style and tone, and the plugin writes a full article plus the focus keyword, SEO meta title, and meta description — shown with one-click Copy buttons so you can paste them into your SEO plugin. Paste any external link and rewrite that article in your own voice. Highlight any sentence while editing and let the AI rewrite, improve, expand, shorten, fix, or translate it. Then generate a matching featured image with one click.

Every article it writes carries a short AI disclosure at the bottom, naming the model that wrote it — on by default, in your own wording, and only on the posts the plugin actually wrote. That is the EU AI Act (Article 50) transparency duty handled without you having to remember it.

**Supported AI Providers**

* **OpenAI** — All models supported
* **Anthropic** — All models supported
* **Google Gemini** — All models supported
* **OpenRouter** — Access 200+ models including free tiers (Gemini Flash, Llama, Mistral, and more)
* **DeepSeek** — All models supported (text generation)
Check [our AI models recommendation list here ](https://antradusai.com/antradus-ai-lite-models-tested/)

**Key Features (free)**

* **Article from a keyword or URL** — describe a topic, or paste any external link, and get a complete, structured, SEO-shaped article
* **SEO meta generation** — focus keyword, SEO meta title and meta description, shown with Copy buttons ready for your SEO plugin
* **In-editor AI assistant** — highlight text and rewrite, enhance, expand, shorten, fix grammar, translate, or run your own custom instruction (Classic and Block editor toolbars)
* **AI featured images** — drawn from what the article is actually about, uploaded to your Media Library and set as featured in one click
* **10 image style presets** (Default, Gaming, Medical, News, Sports, Finance, Tech, Food, Travel, Entertainment) — all editable with your own visual style prompts, plus an optional colour cast overlay
* **Image shape and quality** — square, landscape or portrait, and a quality dial (OpenAI) so you control what each image costs you; it starts on Draft, the cheapest and fastest
* Every generated image is a full photograph that fills the frame — never a banner with empty colour bars or decorative shapes pasted over it
* **5 styles × 5 tones × 17 languages**
* **FAQ section generation**
* **AI disclosure line, on by default** — one sentence at the very bottom of every article the plugin wrote: *"This content was created with the help of AI (Antradus AI - gpt-4o)."* It names the model that actually wrote that article, the wording is yours to edit, posts you wrote yourself are never marked, and any single post can opt out. Written for the EU AI Act (Article 50) transparency duty
* **Classic and Block editor** — both editors, same features, no setup. Optionally disable Gutenberg for Posts
* **Five AI providers, your own key** — OpenAI, Anthropic (Claude), Google Gemini, OpenRouter and DeepSeek, including OpenRouter's free models
* **Built-in documentation** — browse every guide inside the plugin (Antradus AI → Docs), offline and always matching your installed version. The same guides are online at [antradusai.com/docs](https://antradusai.com/docs/)
* **Custom system prompt** — standing instructions the AI follows for every article you generate
* Topic/niche buttons for quick keyword entry
* SSRF-protected external URL fetching
* AI-powered correction of public figure names in keywords

**Antradus AI Publisher — for working at scale**

[Antradus AI Publisher](https://antradusai.com/for-publishers/) is one license key away — the same plugin, nothing to reinstall. It unlocks the automation on top of everything above, and there is a **7-day trial**. See [every feature side by side](https://antradusai.com/plugin-features/).

* **Human Voice** — articles written the way people write: varied sentence rhythm, concrete detail instead of vague claims, no "In conclusion" endings, and an editable list of ~60 phrases the AI may never use (delve, in today's fast-paced, moreover, game-changer...). Applies to single posts, bulk publishing and product descriptions
* **Rotating article structures** — three different section plans (classic explainer, question-led, ranked rundown) that the plugin cycles through, so a run of posts stops reading like the same template with different words in it. Set one shape site-wide, or override it per post
* **Write Like You** — paste a few of your own published posts once; the AI extracts your style (rhythm, vocabulary, how you address readers, how you open and close) and writes in it from then on
* **One-click Humanize** — rewrite a whole post, or just the paragraph you highlighted, so it stops reading like AI; every fact, link, image and section stays exactly where it was
* **Human Check** — an instant score out of 100 listing the exact AI tells in your post (uniform sentence rhythm, hedging, passive voice, em dash overload, giveaway phrases). Runs offline: no AI request, no tokens, no cost
* **Bulk Publishing** — paste up to 200 keywords or import a CSV and the AI writes and schedules every post, suggests topic ideas from your niche, and sorts posts into your categories; drip-schedule, review as drafts, retry failures, export client reports
* **Google Trends** — see what your country is searching for right now (by category, active trends only, past 4 hours to 7 days) and write about any of it in one click. The article is built from the news reports Google Trends itself lists behind that trend: each one is fetched, read, and its publication time checked against the last 48 hours before a word is written. Anything older is dropped and named, and if nothing survives you are told exactly what was found and can paste your own source instead. Tick several trends and queue them all in one press, or open one and read every source verdict as it arrives. Optionally ends the article with the real list of sources it used. Needs a free SerpApi key
* **YouTube to Article** — paste a video link and turn its transcript into an original article (with the free companion browser extension)
* **WooCommerce product generator** — drop in a product photo and AI vision writes a titled, described, SEO-ready product
* **Yoast SEO & Rank Math auto-fill** — the generated focus keyword, title and description are inserted into your SEO plugin automatically, in both editors
* **Generate meta from any existing article** with one click
* **Album generation** — up to 9 distinct AI-designed scenes from your article, inserted as a gallery or featured image
* **Share to social** — a link under every published post opens a picture builder: the featured image, your logo top-left and the title along the bottom, all moved and resized by drag and drop, with the positions saved as your default. Previews it as Facebook, Instagram and LinkedIn show it, downloads the image, and publishes it to your own Facebook Page, Instagram Business account and LinkedIn company page — with the article link (or its excerpt, or the whole text, or nothing) as the first comment
* **Live web search** — the AI researches the live web first, so you can cover news from hours ago
* **Merge 2 sources** — blend two article URLs into one original piece
* **Free-form post assistant** — tell the AI what to do with the whole post, in your own words
* **Internal linking** — bulk batches link themselves together when they finish, and every post gets link suggestions in both directions: pages this one should link to, and older posts that should link back to it (the fix for orphan posts nothing points at). Links only ever wrap words already in your text — nothing is rewritten
* **SEO clusters** — turn one idea, article link or video into a pillar-and-spoke set: a long overview plus 6-14 deep dives, planned for your approval, written, scheduled and linked to each other automatically, and filed together under one category the AI picks for the whole set
* **AI Search (GEO)** — writes articles the way ChatGPT, Perplexity and Gemini can actually quote them: self-contained sections, real figures, dated facts, comparison tables. Includes an instant offline score of how quotable a post is, extra structured data handed to Yoast or Rank Math, a check of whether your site accidentally blocks the AI search crawlers, and optional counts of visits arriving from AI assistants
* **Search Demand** — connects Google Search Console and Analytics and reads what this site already gets shown for, scores every search against what the site is for (people who would buy what you sell, or the readers your blog is written for) and charts the split, reads the whole picture back to you in plain language with what to write next, writes the pages the good ones have nowhere to land — on a site that sells, with a section on what you sell, links to your own pages and your closing line — and rewrites the titles of posts aiming at searches nobody types.
* **Reporting** — words, images, tokens and estimated cost per post, with editable model prices

**Antradus AI Studio — for a whole show**

[Antradus AI Studio](https://antradusai.com/for-studios/) is everything in Publisher, plus a second pipeline: a podcast or video show, its whole back catalogue, and the things you publish around each episode. Publisher already turns a **single** video into an article from the post editor — Studio is that for an entire show, on a schedule.

* **Podcast to Articles** — turn one episode into a set of articles that carry what you actually said. It asks what you are promoting — **Spotify, YouTube, or both** — and follows your answer instead of deciding for you. Spotify is the better source and says so: its transcript is punctuated and marks who is speaking, where YouTube's automatic captions do neither. Choose **Both** and you give both addresses and pick what your readers see: which player is embedded, which service the timestamps point at, and whether the show notes are read from both so a sponsor link one platform truncated is still found on the other. The transcript always comes from Spotify in that mode, shown as a tick you cannot undo. Timestamps can be moved onto YouTube's clock, and only by **measuring** the offset between the two recordings in dozens of places — never by assuming they start together, which they don't. The whole transcript is read (not the first few minutes), so every article is built from the episode's own arguments, figures and examples. **Every** quotation is checked word-for-word against the recording — the pull quotes and the ones inside sentences — and anything that doesn't match loses its quotation marks before the article is saved, so nothing is ever put in your guest's mouth. Where the recording labels its speakers, who said what is read off the recording; where it doesn't, or where a quotation runs across a change of speaker, the words are published without a name rather than guessed at. Claims can carry the moment they were said, as a link that starts the episode there. Every section is checked on its own for something that came off the recording — a quotation, a figure, a moment a reader can go and hear — and the ones that carry none are named for you. Every article embeds the video, links to the others, ends with a one-click **Subscribe** link, and can carry the episode's sponsors with a disclosure line and `rel="sponsored"` links. Featured images can be built from the episode thumbnail — the same guest's face on every article, a new scene each time, with the thumbnail's headline removed and no new text added, in a look you set yourself (bright, true-to-life editorial photography unless you change it). Write the articles in a different language from the episode and every pull quote is translated, with the words actually said printed beneath it and labelled as the original
* **Saved Plans** — every episode you plan is kept, with the corrections you made on it: the speaker names you fixed, the quotations you ticked, the sponsor rows you edited. Open one again months later and the screen comes back exactly as you left it, without re-reading the episode and without paying for it again. Paste an address you have planned before and the plugin says so before you spend anything, and offers you that plan instead. Plans can be exported to a file and imported on another site, the recording is kept alongside each one so quotations can still be checked word for word years later, and a plan that has already written its articles says so — so opening it again cannot quietly publish the same episode twice
* **Episode Assets** — a newsletter, a set of quote cards and the post copy, from an episode you have already planned. Nothing is read again and nothing is re-billed. **The quote cards are drawn, not generated**: the letters come from a font file, and every quotation is checked word for word against the recording in the instant before it is drawn — a card whose wording no longer matches is not produced at all, and says so. Four styles (flat, photo, split, and a highlighted-paper marker style), your own colours saved per show, and every card carries the moment it was said. The two styles drawn on the episode picture show you that picture first — taken from YouTube or Spotify, or uploaded by you when neither will give one up — rather than quietly falling back to flat. A quotation too long for a style falls back to a roomier one rather than being shrunk or trimmed — the words never give way, the design does. Right-to-left text is refused outright rather than drawn reversed. The newsletter comes out as real email HTML with a plain-text alternate, ready to copy, download, send yourself as a test, or push as a **draft** to Kit, Mailchimp or beehiiv — nothing here can send an issue. Slides download as a numbered ZIP with the caption, and can optionally be published straight to Instagram behind a confirmation that names the account and counts the slides. Cards can be drawn in another language: each quotation is checked first, then translated, and the card says it is a translation

**Antradus Managed — we run it for you**

Not software. We build or enhance the site, run the back catalogue and hand you the finished thing. Sold after a conversation — [talk to us](https://antradusai.com/contact/).

**Where to read more**

* [All plugin features](https://antradusai.com/plugin-features/) — every feature in Lite, Publisher and Studio, side by side
* [Antradus AI for publishers](https://antradusai.com/for-publishers/) — bulk publishing, internal linking, SEO clusters and AI Search, for a site that has to keep producing
* [Antradus AI for studios](https://antradusai.com/for-studios/) — a whole podcast or video back catalogue turned into articles, quote cards and newsletters
* [Documentation](https://antradusai.com/docs/) — every guide, online; the same guides ship inside the plugin under Antradus AI → Docs
* [The Antradus AI blog](https://antradusai.com/blog/) — what actually works in AI SEO, written from running it
* [Which AI models we recommend](https://antradusai.com/antradus-ai-lite-models-tested/) — tested, with the ones to avoid

== Installation ==

1. Install directly via the WordPress **Plugins > Add New** screen, or upload the `antradus-ai-lite` folder to the `/wp-content/plugins/` directory.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Open the new **Antradus AI** menu in your admin sidebar and enter your API key for your chosen provider.
4. Open any post or page, find the **Antradus AI** panel, enter a keyword, and click **Start Writing**.

== Frequently Asked Questions ==

= What's the difference between Lite, Publisher and Studio? =

**Lite** is free forever and is the whole writing toolkit: full articles from a keyword or any URL, SEO meta with copy buttons, the highlight-text assistant, and AI featured images. Most people never need more than this.

**Publisher** is for running a website at scale — bulk publishing, internal linking, SEO clusters, AI Search (GEO), Human Voice, live web search, YouTube to Article for a single video, automatic Yoast/Rank Math fill, Share to social for Facebook, Instagram and LinkedIn, and Reporting.

**Studio** is for running a *show*. It adds a second pipeline on top of Publisher: a whole podcast or video back catalogue turned into articles, with every quotation checked word-for-word against the recording, plus Saved Plans and Episode Assets (quote cards, newsletter drafts, Instagram).

The short version: if you have a website, Publisher. If you have a podcast, Studio. Publisher already turns one video into an article, so you can try that shape before deciding.

= Do I install a different plugin for each plan? =

No. There is one plugin. Lite comes from WordPress.org; Publisher and Studio are the same download, and your license key decides which features appear. Moving between plans means changing a key, never reinstalling anything, and your settings and API keys carry over.

= I bought Antradus AI Pro before the plans existed — what happens to my license? =

Nothing changes for you. The original license carries the **full Studio** feature set, permanently, and you don't need to do anything to keep it. No feature was taken away from anyone who had already paid.

= Is there a free trial? =

Publisher has a 7-day trial with a card required. Studio is sold after a demo instead, because there is usually a real conversation to have about your show first. Lite is free forever and runs the same writing engine, so you can judge the output quality without any of that.

= Where can I see everything Publisher and Studio add? =

Three places, and they all say the same thing. Inside the plugin, open **Antradus AI → ✨ More Features**: every feature in all three plans, with the ones your license does not cover marked with a padlock, so you can see exactly what you would get before you spend anything. Online, there is [the full feature list](https://antradusai.com/plugin-features/) side by side, plus a page for each plan — [Antradus AI for publishers](https://antradusai.com/for-publishers/) if you run a website, and [Antradus AI for studios](https://antradusai.com/for-studios/) if you run a podcast or video show.

= Where is the documentation? =

Both inside the plugin and online. **Antradus AI → Docs** carries every guide, offline, always matching the version you have installed — there is nothing to configure and no internet needed. The same guides are published at [antradusai.com/docs](https://antradusai.com/docs/), which is the easier one to link to a colleague. Practical write-ups on what actually works in AI SEO live on [the Antradus AI blog](https://antradusai.com/blog/).

= Can I try the paid features before paying? =

Publisher has a **7-day trial** (a card is required, and you are billed only if you stay past day 7). Studio is sold after a demo instead, because there is usually a real conversation to have about your show first — [talk to us](https://antradusai.com/contact/). Lite is free forever and runs the exact same writing engine, so you can judge the output quality without any of that.

= Where do I find the plugin while editing a post? =

In the Classic editor it appears as a panel under the content area. In the block editor it lives in the right-hand sidebar — click the anchor (Antradus AI) icon in the top toolbar (or the three-dots menu, then Antradus AI) to open it.

= Which API key do I need? =

You need an API key from at least one supported provider:

* [OpenAI](https://platform.openai.com/)
* [Anthropic](https://console.anthropic.com/)
* [Google AI Studio](https://aistudio.google.com/)
* [OpenRouter](https://openrouter.ai/) — offers free models requiring only a free account

= Does this plugin store my content on external servers? =

No. Your keywords and articles are sent directly to the AI provider you have configured. This plugin does not store, log, or transmit your data to any server other than the provider you choose. Refer to each provider's privacy policy for details on how they handle request data.

= How do the SEO meta and my SEO plugin work together? =

The free version generates the focus keyword, SEO title, and meta description and shows them with Copy buttons — paste each value into Yoast SEO, Rank Math, or any other SEO plugin. In **Publisher** the values are inserted into Yoast or Rank Math automatically, in both editors.

= How does the in-editor AI assistant work? =

Highlight any text while writing. In the Classic editor, open the **AI ✨** dropdown in the toolbar; in the Block editor, it appears in the block's text toolbar. Pick Rewrite, Enhance, Expand, Shorten, Fix Grammar, Translate, or type your own instruction — the highlighted text is replaced with the result (Ctrl+Z brings the original back).

= Does image generation work with all providers? =

Image generation is available via OpenAI (gpt-image/DALL-E 2 / DALL-E 3), Google Gemini (Imagen), and OpenRouter (Flux and compatible models). Anthropic does not offer an image generation API.

= Can I use a free AI model? =

Yes. OpenRouter provides access to free models such as Google Gemini Flash and others. Select OpenRouter as your provider, create a free account at openrouter.ai, and choose a free model in the settings.

= Can I customize the writing style? =

Yes. You can set a custom system prompt in the **Antradus AI** admin menu to define the writing style, persona, language, or any standing instructions the AI should follow for every article.

= How does YouTube to Article work? (Publisher) =

In **Publisher**, install the free companion browser extension, the **Antradus Auto Pilot YT extension**, and enable it on your WordPress site. Paste a YouTube link into the panel, click **Get transcript** — the extension reads the video's transcript inside your own browser — review it, then click **Start Writing** to turn it into an original article. Videos with subtitles (CC) give the best results.

= How does album generation work? (Publisher) =

Open **Album Generating** in the panel, choose how many images you want (up to 9), and click Generate Album. The AI reads your article, designs a different scene for each image, and draws them one by one. Click any image to set it as featured, or insert them all as a gallery.

= Does AI-written content sound obviously AI-written? (Publisher) =

That is what **Human Voice** in **Publisher** is for. It tells the AI to vary sentence length instead of writing every sentence the same length, to open on something specific, to use concrete numbers and names instead of vague claims, to skip the summary paragraph at the end, and to never use around 60 giveaway phrases (you can edit that list). You can also teach it your own style from your published posts, rewrite any existing post with one click, and run an instant **Human Check** that scores the post and names every tell it finds — no AI request, so that check costs nothing.

There is a second giveaway that good sentences alone never fix: every post coming out in the same shape. Two articles on different subjects, with the same opening move and the same run of sections, read as mass-produced however well each sentence is written. **Rotating article structures** answers that — three different section plans that the plugin cycles through, so consecutive posts are built differently, not just worded differently.

One thing it deliberately does not do: it never invents personal anecdotes, statistics, or customer quotes to sound human, because that would publish false claims in your name. The final five minutes — adding the real detail only you know — are still yours.

= Does it work with the Classic Editor? =

Yes. The plugin automatically detects whether a post uses the Block Editor or the Classic Editor and loads the correct interface.

= Will it conflict with other AI plugins? =

The plugin uses a unique `antradus_` option prefix and `antradus_lite_` function prefix throughout.

== Screenshots ==

1. Choose your model (OpenRouter supports free models)
2. Antradus AI main view
3. Antradus AI rewrite from external source
4. Antradus AI writing and style features
5. Antradus AI Image capabilities
6. Antradus AI find your settings page

== Changelog ==

= 2.15.1 =
* **Changed: Studio is sold after a demo, and the plugin now says so everywhere.** The ✨ More Features screen showed Studio with a monthly price and an "Unlock" button that went straight to checkout, while the website, this listing and the guides all said Studio is sold after a conversation. Studio now has no price on that screen and a **Book a demo** button that opens the contact page. The two locked Studio tabs a Publisher licence sees on the Bulk Publishing screen book a demo too, and the plan tables in the guides say the same.

= 2.15.0 =
* **Fixed (Studio): saving the Settings page disconnected Instagram in Episode Assets.** The Instagram connection was stored alongside the Settings page's own options, and WordPress clears every option of that page the form does not show — so each Settings save silently emptied it. It now lives on its own. The Instagram box on the Episode Assets tab also never actually saved what you typed; it now has a **Save Instagram details** button and asks for your Meta app ID and secret, so a pasted token is turned into a long-lived one straight away and renewed before it expires. The connection also moves to Meta's current API version, as the old one reached the end of its support.
* **Added (Publisher): Share to social.** A "Share to social" link now sits under every published post and page. It opens a picture builder that starts from the featured image with your logo in the top-left corner and the post title along the bottom; drag anything to move it, drag a corner to resize it, add your own lines of text, and save the positions as the default for every post. It previews the post the way Facebook, Instagram and LinkedIn show it, downloads the picture, and publishes it to your own Facebook Page, Instagram Business account and LinkedIn company page, adding the article as the first comment — the link, the excerpt and link, the whole text, or nothing, your choice. Each site connects its own Meta and LinkedIn apps, and nothing is posted without a confirmation that names every account it is going to.
* **Fixed (Publisher): 🧍 Humanize this post and 💬 Tell Antradus AI what to do with this post now work on long posts.** Until now both refused anything over about 2,000 words, because one AI reply cannot hold a whole long post. A long post is now worked on one section at a time, and the status line counts the sections as they finish. Nothing in the editor changes until every section is back, so if one fails the post is left exactly as it was. Sections are only ever cut between blocks or paragraphs, never through one. Images and embeds are left untouched, and each section is told where it sits so it doesn't add its own introduction or conclusion. An assistant instruction that needs the whole post at once, such as a summary, is recognised and sent in one go.

= 2.14.0 =
* **Added (Studio): articles can be written in a different language from the episode, and the quotations are translated honestly.** Every pull quote is printed in the article's language, with the words that were actually said directly beneath it, smaller, and a line saying what language they were spoken in and that the quotation above is a translation. The original is still checked word for word against the recording, so every quotation still has checked words behind it. Until now the writer was told to write entirely in your language and never change a word of a quotation, and whichever of the two it obeyed, something broke.
* **Changed (Studio): a translated sentence can no longer appear in quotation marks inside a paragraph.** Only a pull quote has room for the original beside the translation, so quotations inside sentences are reported in the article's own words. A translation that comes back empty, repeats the original, or runs far longer than what was said is dropped and the original is published alone, and the job notes say how many.
* **Fixed (Studio): quotation marks in every language are now checked.** Only “…” and "…" were checked before, so a Spanish, French or German article could put a paraphrase in «…» or „…“ under a real person's name and nothing looked at it.
* **Added (Studio): choose the language of your quote cards.** Episode Assets has a Language menu beside Style and Shape. Each quotation is checked against the recording first, then translated with one request, kept for 30 days so previews and redraws are free. The card says it is a translation. A translation that adds a number the speaker did not say is refused, and the card is then drawn in the original words. Context lines and post copy follow the same language.
* **Fixed (Studio): the font check could not see a missing letter.** It compared every character against a reference the drawing library cannot read, so every font passed. A card in a language the chosen font cannot draw, such as Russian or Japanese with the bundled fonts, is now refused and the missing letters are named, instead of coming out as empty boxes.

= 2.13.2 =
* **Changed (Studio): nothing at all is changed on your guests any more — not even the light on them.** When Podcast to Articles builds each article picture from the episode thumbnail, every pixel that belongs to a person now comes through exactly as supplied: no retouching, smoothing, beautifying, ageing or slimming, no changed expression, gaze, pose or hand, no changed hair, glasses or clothing — and no relighting. The instruction used to tell the model to light your guests to match the new scene, which is the last door left open on a face: a model allowed to change the light on someone changes their skin, their age and their expression along with it.
* **Changed (Studio): the background is made to suit the people instead.** The model reads the light already on your guests — which side it comes from, how high, how hard, how warm — and builds and lights the new scene to match it, choosing the time of day, the room and the surfaces that make that light plausible. Every disagreement between the scene and a person is resolved by changing the scene.
* **Fixed (Studio): the look you set, and the colour cast, can no longer reach a face.** Both are written as whole-frame grades and the look said so in as many words ("apply its light and colour to the whole picture, the people included"), which quietly outranked the keep-the-people rule above it. The look now applies to the new scene only, and a final rule after both of them exempts every person.

= 2.13.1 =
* **Fixed (Publisher): the description of what you sell was only ever saved by pressing the scoring button.** Type it, leave the tab without scoring, come back — and it was gone. It saves itself now, the moment you click out of the box.
* **Changed (Publisher): the scoring button moved to where its result appears.** It sat on step 2 beside the description it reads, so you pressed it on one screen and the list it changed was on another. It now sits directly above the write list. What had kept it on step 2 was the save above, not the reading.
* **Added (Publisher): a score is remembered against what you sell, so changing that description un-scores every search — and now the screen says so.** Editing the box reports how many searches need scoring again instead of letting you find out by noticing a number.
* **Fixed (Publisher): the scoring button went back to saying nothing once there was nothing left to score.** It now reads "Everything is scored — all 118 searches" and is greyed out, rather than falling back to a verb with no object.
* **Fixed (Publisher): the brief printed its grounded ideas under an Impressions column in no particular order.** 92 above 20 was a coincidence. They are sorted biggest-first now, and the suggestions list — which has no measured number to sort by — says that it is in the order the model wrote them.

= 2.13.0 =
* **Changed (Publisher): the Search Demand tab was rebuilt because it was unreadable.** Ten sections rendered at once, nine buttons scattered down the page, and a button labelled "Score for buyer intent" with nothing on screen saying what it was about to score. Setting up is now three numbered steps with one open at a time — connect Google, say what the site is for, then the work — and a finished step collapses to one line saying what it was set to, so nothing is hidden that you cannot read at a glance. The six result lists share one space behind tabs that carry their own counts, so the screen tells you where the work is instead of making you scroll for it. The two charts and the eight publishing options are folded away with a summary of what they are set to. Refresh sits in a bar of its own, because it is wanted from every step.
* **Changed (Publisher): the scoring button now says what it scores.** It reads "Score for buyer intent — 118 searches" with the real count, and the line under it says the model is shown each search on its own and never how popular it is, so a search with big numbers cannot talk it round.

= 2.12.0 =
* **Added (Publisher): Search Demand now asks what the site is for — "I sell something" or "I run a blog".** The two want opposite things from the same data. A site that sells needs buyers and articles that show what it sells; a blog needs readers and articles that sell nothing. On a blog every search is now scored for whether it comes from the reader the site is written for, the chart and the labels say so, and the model's own suggestions are the next subjects to cover rather than searches a buyer would type. Scores are kept separately for each choice, and a site that already sold something keeps every score it had.
* **Fixed (Publisher): articles written from Search Demand never mentioned what you sell.** Your description of the business was used to score the searches and then dropped — the article was only ever told the search — so every article came out as a neutral piece on the subject with no word about your product, your pricing or anything else of yours. On a site that sells something, every article is now told what you sell and writes one section on how it handles the problem the article is about, saying only what your description says: no invented features, prices or results, never "the best", never a named competitor.
* **Added: the pages to send readers to.** Pick your pricing page, product or service pages, or the article that explains what you sell, and every article links to the ones that fit — up to three, each once — and ends with your own closing line pointing at the closest one. Those are the only pages on your site an article may link to: any other link into your own site the AI writes is removed and its words kept, because it would be a guess at an address, and a guessed address is a broken link. The link check and the closing line are done by the plugin after the AI has finished, so they cannot be skipped or invented. Internal linking could never have done this: it only links a post to other posts, and pricing and product pages are pages.
* **Added: links into the articles Search Demand already wrote.** A list of them sits under *Write these*, showing which already link to your pages. One button adds the links — around words already in each article, through the same engine as internal linking, so no sentence is rewritten and nothing lands in a heading or a quotation — and the closing line. **Undo this run** puts them back, and refuses to overwrite an article somebody has edited since.
* **Fixed (Publisher): saving the Settings page wiped the Search Console property you had chosen.** WordPress saves every setting registered to a form and stores an empty value for one the form does not show — the property and Analytics choices were registered to the Settings form but only shown on the Demand tab. They now belong to the tab alone.
* **Fixed (Publisher): Undo on "Fix these" silently restored nothing when the old title had a quote mark or a dash in it.** The backup lost its backslashes on the way into the database and could no longer be read. Titles written by AI models are full of dashes, so this was the common case rather than the rare one.
* **Fixed: the Search Demand reading was logged as "other" in Reporting.** It makes a model call and was never named; it now reports as *Search Demand reading*, and the new link pass as *Links to your pages*.
* **Fixed (Studio): pictures built from an episode thumbnail no longer all come out as dark rooms.** The instructions behind them were built into the plugin and asked for the same picture every time — a darker background, haze, smoke and embers, teal shadows against amber highlights, strong rim lighting, "symbolic objects and rooms", with "a candlelit study at dusk" as the one example. So every article's image was a dim, smoky interior whatever the article was about, often with a chessboard, a set of scales or a candle standing in for the idea. Each picture is now set in one real place where that article's own question comes up — taken from its title rather than the episode's broad theme, so articles on the same subject land in different places — in natural light that favours daylight, with true colours and your guests the sharpest thing in the frame.
* **Added (Studio): Podcast Episode Images — set how those pictures look yourself.** A new box in **Antradus AI → Settings → Image Generation** holds the look in plain English — the kind of place, the light, the colour — and every episode picture follows it. It ships filled with the new bright editorial look, and **↺ Restore default** puts that back. While the box matches the default, a better default in a later update reaches your site on its own.
* **What that box cannot change, on purpose:** everyone on the thumbnail is kept exactly as they are and nobody else is added — not even a stranger in the background — the thumbnail's own headline is removed, nothing else in the picture carries writing, and it stays one photograph filling the frame.
* **Changed (Studio): episode pictures no longer use the Image Generation style preset.** Presets are written for pictures invented from nothing — the default one asks for "real people", an invitation to add a stranger beside your guests — and two styles in one request get averaged into neither. The colour cast still applies. Images written from scratch still follow the preset exactly as before.
* **Fixed (Studio): a picture carrying a headline no longer asks for a darker patch behind the words.** They need a calm, uncluttered area to sit on, not a dark one; the text is already set light on dark or dark on light to stay legible.

= 2.11.0 =
* **Added (Publisher): Search Demand now shows you the shape of your traffic, not just a list.** Two charts sit at the top of the **&#128269; Demand** tab. The first is how often Google showed this site day by day, with clicks under it. The second is the one that matters: the same impressions split by whether the person searching would ever buy what you sell. On a site collecting attention from the wrong audience, that second chart *is* the diagnosis, and it takes one glance instead of reading a table.
* **Added: "What it makes of this" — it reads your data back to you and says what to write.** One button, one pass over everything on the screen against your description of what you sell. It answers in two short paragraphs — what it saw, and what it makes of it — and then proposes articles in **two lists that are never mixed**: ones backed by a search Google really shows you for, and ones that are the model's own judgement about searches you have never appeared for. The second list is labelled as judgement everywhere it appears, because Search Console cannot show you the demand you do not already touch, and pretending otherwise would be the exact dishonesty this feature was built to avoid. Anything in either list can be ticked and queued as ordinary articles.
* **A proposed article that quotes a search you do not actually have is thrown away, not corrected.** Every "backed by your data" row is checked against the real list in code before you ever see it. The impressions shown beside it are the measured ones, never anything the model said.
* **Added: searches served by pages that no longer exist.** If Google still shows an address that is not a post here any more — you deleted it, or moved it — that is now its own list. It used to be invisible, which meant a deleted page and a page that never existed looked identical on this screen, and they need opposite work: put it back, or write something new. The plugin was already collecting this and throwing it away.
* **Fixed: the screen now says when your Search Console property is a different site from your WordPress install.** This was the worst failure the feature had, because it looked like an answer. Searches still came through — a search carries no address — while everything needing a page address silently reported zero. *Fix these* and *Losing ground* would say there was nothing to do, and the *Currently ranking* column would print "nothing ranks" beside searches a live page really did rank for. There is now a warning above the verdict naming both sites, saying exactly which lists are affected and why.
* **Fixed: "Write these" no longer renders an empty table when every search scored as a non-buyer.** The rows were behind the "show non-buyers" toggle the whole time, but the block drew a bare column header over nothing — which reads as a broken screen, not as a filter doing its job. It now says how many were filtered and where to find them, and hides the publishing options and the queue button rather than offering to queue nothing.

= 2.10.0 =
* **Added (Publisher): Search Demand — what you already rank for, and what to do about it.** A new **&#128269; Demand** tab on the Bulk Publishing page connects your own Google Search Console (and optionally Analytics), reads what this site is *already being shown for*, and turns it into two lists with a button on each. Not a keyword tool: it answers "what should I write about" from your own impression data — the only source that knows what Google already thinks your site is about — rather than from search volume bought from somebody else.
* **Every search is scored for whether that person would actually buy.** You describe what you sell in one plain paragraph, and each search is rated 0-3 on the person typing it, not the topic. This is the part that matters: a site can collect a year of impressions from an audience that will never buy anything, and without this filter the obvious next step is to write more of the same. The rejected searches stay visible with the reason each was rejected, because seeing what was thrown away is how you know whether to trust the filter.
* **"Write these"** — searches you get impressions for that no page of yours aims at. Tick them and they become ordinary bulk articles, each one's focus keyphrase set to the exact search it was written for. Live web search is off by default here, deliberately unlike Trends: a commercial search does not postdate the model's training data, so paying for one would buy nothing.
* **"Fix these"** — posts that are indexed and being seen, but whose title aims at something nobody types, or that rank on page one or two and earn far fewer clicks than that position normally does. **Only the two lines Google shows are ever changed** — the article, its heading and its web address are never touched — every rewrite is shown to you as before-and-after before anything is saved, and **one button puts the whole run back**.
* **It refuses the advice it cannot stand behind.** A page Google has never indexed is reported separately and offered no title fix, because that is an indexing problem and a new title would not touch it. A page losing impressions as well as clicks is told plainly that it is losing positions and needs the article updating, not a new title. And if the AI proposes a keyphrase your page does not actually get impressions for, the suggestion is refused rather than quietly corrected — inventing a phrase nobody searches is the exact fault the feature exists to fix.
* **Set up with a Google service account**, so nothing is shared with anyone and no third-party app needs approving. The screen shows the address to give read access to, names which Google API is switched off when one is, and tells you if your server's clock is what Google is objecting to.
* **Fixed (Publisher): Google Trends and SEO clusters were logged as "other" in Reporting.** Both make model calls, and neither was named in the usage log, so their cost appeared under a heading that explained nothing. They now report as *Trending article* and *Cluster planning*.
* **Added (all editions): ✨ More Features — one screen that shows you what the other plans do.** Until now, a free install could only see the paid features that happen to sit beside a free control. Everything living on a screen of its own — Bulk Publishing, Google Trends, SEO clusters, Reporting, and the whole podcast pipeline — was simply invisible, so the honest answer to "what would I get" was "go and read the website". Now **Antradus AI → ✨ More Features** lists every feature in Lite, Publisher and Studio, with a tick beside the ones your license already covers and a padlock beside the ones it doesn't. Publisher installs see only what Studio adds; Studio installs are not shown the screen at all, because there is nothing left to sell them.
* **Bulk Publishing and Reporting now appear in the free menu, locked.** They sit exactly where they appear on a paid plan, so the free menu is the paid menu with padlocks on it rather than a different shape. Both are links to the More Features screen — nothing here opens a page that renders an error or an empty table.
* **Nothing moved across the free/paid line.** Every feature that was free is still free, and nothing that was paid became free or vice versa. This release adds visibility, not entitlement.
* **The feature list now lives in one place.** The screen, this readme and the documentation are generated from a single list in the plugin, and a test fails the build if the three ever disagree — so the plugin can no longer advertise a feature it dropped, or quietly ship one it never mentioned.
* **New guide: "Which Plan Do I Need?"** — Lite vs Publisher vs Studio vs Managed, what each one is actually for, and how to decide. Readable inside the plugin under **Antradus AI → Docs**, and online at [antradusai.com/docs](https://antradusai.com/docs/).
* **More signposting to the things that explain this plugin** — [the full feature list](https://antradusai.com/plugin-features/), [for publishers](https://antradusai.com/for-publishers/), [for studios](https://antradusai.com/for-studios/), [the documentation](https://antradusai.com/docs/) and [the blog](https://antradusai.com/blog/) are now linked from the readme, the docs and the new screen, instead of being something you had to already know about.

= 2.9.0 =
* **Added (all editions): the AI disclosure line.** Every article the plugin writes now ends with one sentence telling readers it was written with AI, and naming the model that wrote it — *"This content was created with the help of AI (Antradus AI - gpt-4o)."* On by default, because the EU AI Act (Article 50) asks anyone publishing AI-generated text to say so, and that duty does not belong to a paid plan.
* **It names the model that actually wrote that article.** The model is recorded on the post as it is written, so switching provider next month does not rewrite the history of what you published last month.
* **Only the posts Antradus wrote.** Articles from the editor, from Bulk Publishing (clusters, Trends and podcast spin-offs included) and product copy written from a photo. Posts you wrote yourself are never marked, a CSV import is never marked, and using the AI Assistant or Human Voice to edit your own writing does not mark it either.
* **Yours to word, and to switch off.** Antradus AI → Settings → **AI Disclosure**: turn it off, or rewrite the sentence with `[model]` and `[provider]` placeholders, and every article follows at once — the line is added when the page is read, never written into your post content, so nothing can delete it by accident and nothing is left behind if you turn it off. Any single post can opt out from its own **AI Disclosure** box in the editor.
* **Changed (Publisher): a Google Trends source now counts as fresh if it was published in the last 48 hours**, counted back from right now rather than rounded to a calendar day. The old "published today" rule accepted half an hour of reporting at 00:30 and threw away last night's report on the story still trending this morning. The tighter settings are unchanged in spirit and now read as *within 12 hours of the trend* and *within 6 hours of the trend*, both on top of the 48-hour floor; an install that had chosen "published today" moves to the 48-hour setting rather than to a stricter one. Times shown to you are still your site's local time.

= 2.8.0 =
* **Added (Publisher): Google Trends, with the freshness actually checked.** A new **📈 Trends** tab on the Bulk Publishing page shows what your country is searching for right now — country, past 4 hours to 7 days, category, active trends only, search volume and how fast each one is climbing. Press **Write about this topic** on any row and Antradus pulls the news reports Google Trends itself lists behind that trend, then does the part nobody else does: it **fetches each report, reads the publication time out of the page** (structured data, article:published_time, the article's own time tag) and keeps only what was published **today in your site's timezone**. Live web search is always on for these, so the model can confirm and fill gaps — but the checked reports are the spine, and it is told not to outrun them.
* **When nothing is fresh enough, it says so and hands you the controls.** Instead of writing a confident article from a model's memory, the tab tells you how many sources it looked at, which was the newest, and when it was published — then offers a box to paste your own source, which goes through exactly the same check. Nothing is queued until at least one source has passed.
* **The list of sources is real.** Optionally ends each trend article with the reports it was actually written from — outlet, headline and publication time — built by the plugin from the pages it read, never written by the AI. The full record, including the sources that were checked and dropped and why, is kept on the post itself.
* **Write about ten trends without ten trips through the screen.** Tick the trends you want, press **⚡ Add to the queue**, and each one is checked and queued in turn against your saved settings — style, tone, language, post type, category, author — with a running count and a **Stop** button that finishes the trend in hand and leaves the rest. They all land in one batch, so the Queue tab runs and reports them together. Your choices are remembered the first time, so tomorrow morning is one click.
* **New settings** (Antradus AI → Settings → Google Trends): your SerpApi key with a **Test connection** button that reports how many searches your plan has left without spending one, a default country, how many sources one article may use (never two from the same outlet), and how fresh a source must be — published today, or within 12 or 6 hours of the trend.

= 2.7.0 =
* **Two paid plans instead of one.** **Publisher** is everything for a website — bulk publishing, internal linking, SEO clusters, AI Search, Human Voice, YouTube to Article, and the rest. **Studio** adds the whole show pipeline on top: Podcast to Articles, Saved Plans and Episode Assets. Antradus AI Lite is unchanged and stays free forever.
* **Nobody loses anything they already bought.** Every existing licence carries the full Studio feature set, by licence number as well as by name, so a rename can never quietly take a feature away from someone who paid for it.
* **A 7-day free trial on Publisher.** There was no trial at all before, because the only plan was a one-time payment and a trial on one of those bills the whole amount the day it ends. Publisher is monthly, which is what makes a trial safe — and it is 7 days rather than 3, because nothing about search is visible in 3.
* On Publisher, the Podcast to Articles and Episode Assets tabs are shown locked rather than hidden, so it is clear what Studio adds and what it costs — and they link to a person, not just a checkout.
* Internal: the plan check matches the plan name exactly and never falls back to the licensing SDK's ranked comparison, which a trial can outrank. Anything the plugin cannot positively identify is treated as Publisher, never as Studio.

= 2.6.0 =
* Added (Pro): **Saved Plans.** A planned episode is now kept instead of evaporating. Reading a three-hour episode is around twenty requests, and the plan screen is where a *person* fixes what no code can — who is speaking, a misheard name, which quotations are worth printing, a sponsor row that came through wrong. Until now all of that lived in a twelve-hour session and was then gone: opening the same episode a week later meant paying to read it again and re-doing every correction by hand.
* A new **💾 Saved Plans** tab beside Podcast to Articles lists everything you have planned — service, show, episode, guest, how many articles and quotations, roughly what it cost — and filters by service, show and date. **Load** puts a plan back on the podcast screen exactly as you left it. Nothing is re-read and nothing is charged.
* Plans save two ways: a **💾 Save this plan** button, and automatically when you press the button that writes the articles — which is the moment a plan is finished being corrected, and also the moment a person stops thinking about it.
* **Paste an episode you have planned before and the plugin tells you before you spend anything**, and offers to open that plan instead of reading it again. It recognises the same episode from a share link, a watch link, a link with a timestamp on it, or the bare id.
* **The recording is kept with each plan**, compressed. The copy stored beside an episode is cleaned up after thirty days; the one in the plan is not, so quotations in a plan opened next year can still be checked word for word against what was actually said. It can be turned off, and the tab shows what the plans are costing you in storage either way.
* A plan that has **already written its articles says so** when you open it, and how many — so reloading one cannot quietly publish the same episode a second time.
* Plans can be **exported to a file and imported on another site**, which also makes a problem plan something you can send us.
* Two refusals, both deliberate. A plan saved by a different version of the plugin is **refused by name**, saying both formats, rather than loaded with fields silently missing — a plan that comes back three fields short is worse than one that will not come back. And if the plan is too large for your host's database to store the recording alongside it, the **plan is saved without the recording** and tells you, rather than the save failing and taking your corrections with it.
* Saved plans are **not** deleted when the plugin is uninstalled unless you explicitly tick a box asking for that. Months of your own corrections are not something an uninstall should quietly take with it.
* Nothing in the shipped Podcast to Articles pipeline changed. Quote verification, timestamp mapping, the measured clock offset, attribution, article writing and the render layer are byte-for-byte what they were.

* Changed: **the whole interface has been redrawn, and nothing has moved.** Every screen — the post editor box, Settings, Bulk Publishing, Reporting — was built at a different point in this plugin's life and looked it: the same field was three different heights, the same blue was four blues, and on the Bulk screen the button that actually creates your posts was the same grey as *Restore default*. There is now one set of colours, corners, shadows and control heights behind all of them. Fields, buttons and tables match wherever you are; the action a form exists for looks like the action a form exists for; tabs join the panel they open; tables get a readable head and a row that follows your pointer; the Reporting figures are set as figures; hints are quieter, and the ones that are warnings look like warnings. Every control has a proper keyboard focus ring, and animation is switched off for anyone whose system asks for that. **Not a single thing changed place** — every element on all five screens is in the same order and the same column it was in before, which was checked element by element rather than by eye.

* Added (Pro): **Episode Assets** — one more step after the plan, producing the things an episode needs that are not articles.
* **Quote cards, drawn rather than generated.** Every competitor's quote images are AI-selected and AI-transcribed, and nobody checks them. These are composed by the server from a font file, and each quotation is re-checked against the recording in the instant before it is drawn — through the same checker the articles use, not a second copy of it. Change one character of a verified quotation and no card is produced at all. Four styles: flat, the episode picture behind the words, a split with the picture above, and a highlighted-paper marker style whose strokes are measured off each line rather than stamped out as identical rectangles.
* **The design gives way, never the words.** A quotation too long for a style falls back to a roomier one and tells you it did. It is never shortened, re-punctuated or squeezed into unreadable type to fit. Right-to-left text is refused with an explanation rather than drawn reversed and unshaped, which is what the drawing library would otherwise do.
* **Your colours, saved per show** — seven of them, plus four one-click presets, contrast warnings against the accessibility threshold (a warning, never a block), and a button that reads five colours out of the episode picture for you to assign. Two open-licensed typefaces ship with the plugin, and your own can be uploaded — checked at upload for the quotation marks and dashes a quote card needs, so you find out then rather than after a card goes out with empty boxes in it.
* **The episode picture is its own step, on screen before you choose a style.** Two of the four styles are drawn on it, so the panel shows you the picture it has — where it came from and how big it is — instead of letting you pick Photo and find out ten cards later that they all came out flat. It is taken from the episode itself (YouTube's 16:9 still when the run has a YouTube address, Spotify's cover art otherwise), fetched once and kept in your Media Library. If neither service will give one up, the reason says so and **you can upload your own**, which the cards, the preview and the colour picker then all use. Styles that need a picture are offered but not selectable until there is one, with the reason written beside them.
* **The preview is the real card**, rendered by the same code that writes the file and scaled down in the browser — not a JavaScript approximation that disagrees with it about where a line wraps.
* **A newsletter** built from the episode: verified quotations with the timestamp linked to the moment, your articles, the sponsor block with its disclosure, and a subscribe row. Real email HTML — tables, inline styles, 600px, a plain-text alternate — in whichever shape your provider actually wants, because sending the wrong one produces something that looks perfect in the provider's preview and breaks in real inboxes. Copy it, download it, or send yourself a test, all of which work with any provider on earth.
* **Kit, Mailchimp and beehiiv** create a **draft**. There is no send button anywhere in this plugin and no code path that could reach one. beehiiv's API restricts creating posts to Enterprise plans, so that one is expected to refuse on most accounts — it says so plainly and points you at Copy HTML instead of failing mysteriously.
* **Instagram, optional and off until you set it up.** Instagram has no drafts, so publishing is immediate and public — it asks you to confirm, naming the account and counting the slides, every time. Before a single slide is uploaded it checks that Instagram can actually download your images, which is what stops a half-built carousel on a local, staging or password-protected site. The ten-slide API limit is enforced in the interface with the reason, and the daily posting limit is read from your own account rather than guessed at.
* **Post copy for Instagram, LinkedIn and X** in one request, with hashtags built from the people the episode actually names. The AI writes the words around the quotation and never the quotation itself.
* **Context lines are the only part that costs anything** — one request per card, stated on screen before you commit. The AI sees ninety seconds either side of the quotation and nothing else, and what comes back is checked in code for quotation marks, invented figures, outside names, links and phrases lifted off the recording. Anything that fails is thrown away and the card is drawn quote-only. It is never patched up to pass.

= 2.5.11 =
* Fixed (Pro): **a Spotify-only episode showed no quotations at all.** The recording was read perfectly — the voices labelled, the caption timings exact, every quotation checked word for word against it — and then the plan screen drew none of them. The quotations table, and the *Who is speaking* step above it, were shown only when the plan had found **two or more named people**; on a Spotify-only run it never does, because who is on an episode is read out of the show notes and Spotify's notes are refused (it serves a truncated share preview, not your description). The articles then lost the quotes too: one nobody can be named for reaches the writer marked *speaker unknown*, and a writer told that will often leave it out. Both mode was unaffected throughout, because the YouTube half supplies the notes — which is why the same episode showed its quotes there and not here.
* The question is now asked because **the recording** says there are two voices, not because we managed to guess their names — the sensible order, given that guessing them is the part that fails. Where there is no list to pick from, *Who is speaking* gives you a box to type each name into, beside the first line that voice actually says and a link to hear it. Where the plan did find the people, the dropdown is exactly as it was.
* A voice you leave blank stays blank. In particular, on a two-voice episode with **one** name filled in, the other voice's quotations are no longer handed that single name — they are published with no name, as they should be. That path could not arise while the table was hidden, and would have printed one speaker's words under the other's the moment it was shown.
* A quotation whose speaker is not on the offered list is no longer thrown away — the words passed the check against the recording, so it is kept and published unattributed. Losing a verified quotation over an unrecognised name was the wrong half to lose.

= 2.5.10 =
* Changed (Pro): **in Both mode, a timestamp that was moved onto the other service's clock now opens the player two seconds early.** Those seconds are measured, not read off the recording the words came from, and a measurement is good to about a second either way — the anchors are caption chunks, and a caption chunk starts where the chunk starts, not where the sentence does. So a line Spotify puts at 0:05 lands at 0:04 or 0:06 on YouTube, and there is no way to know from here which one it is.
* The two mistakes are not worth the same. A second **late** opens the player mid-sentence or past the line entirely, and the one reader who checks a quotation concludes it was invented. Two seconds **early** costs them the tail of the previous sentence, which is what anyone scrubbing to a quotation does by hand anyway. So the link now aims deliberately at the harmless side.
* The **printed** time does not move with it: the number in the article is still the moment the words were said, because that is what the article is claiming and it is the true one. The run-up applies only to links that were translated between two recordings — a single-service episode's timestamps are read straight off the recording you are being sent to and are unchanged.

= 2.5.9 =
* New (Pro): **you can now name the speaker on a quotation the recording refuses to attribute.** A line that starts in one person's turn and ends in the next carries no speaker label, so the plan screen printed *"Not named — this line crosses a change of speaker"* and left it there: unticked, greyed out, and nothing you could do about it. That is the honest reading of the transcript and it is still what the row leads with — but *the recording cannot say* is not *nobody can*. Very often the second turn is an interruption or a "yeah, exactly" and the line really is one person's, which anyone who heard the episode settles in four seconds. Those rows now carry their own dropdown of the people in the episode, underneath the recording's own answer.
* It starts on **Leave it unnamed**, so nothing changes if you ignore it and the row still arrives unticked. Name somebody and the row ticks itself and is published under that name — your answer outranks everything else in the plugin, exactly as it already did on a YouTube episode. Naming a voice in *Who is speaking* never reaches these rows and never overwrites an answer you gave here: they belong to no voice, which is the whole reason they had to be asked about separately. Every other row on a labelled recording is unchanged and still has no dropdown — that column reports what the recording said, and it is not there to be argued with.
* Fixed (Pro): **the suggested names for "Speaker 1" and "Speaker 2" could come out backwards on exactly the episodes where it matters.** The guess reads who says whose name — a host says the guest's name constantly and almost nobody says their own — and that count was taken per episode rather than per thousand words. A voice holding three quarters of the recording therefore picks up more of every term simply by being longer, the guest's own name included, because a diariser that lumps the interviewer's question into the guest's block files that name under the guest. The count is now a rate, and the majority voice is never named the host: an interviewer who talks two thirds of the time is rare, that lumping is not. Where the two signals disagree the share wins, the reason on screen says the count disagreed, and the row is marked as the one to check first.
* Fixed (Pro): **a reason that contradicted the number printed beside it.** With two voices in the room, whichever one was left over was described as doing "most of the answering" whatever its share — so a row could read *"does most of the answering. 38% of the talking"* in one sentence. It now says that only when it is true.
* Changed (Pro): the *First heard* column on the voices table is now **Hear this line**, and the time is the moment of the line quoted on that row rather than the first noise the voice makes. A voice opens with "wrong, beginner's luck" far more often than with a sentence, and four seconds there identify nobody — which is the opposite of what the column is for.
* Fixed: the voices step had a test written for it that was never added to the suite, so it had never once run. That is how the backwards guess above reached a real episode.

= 2.5.8 =
* Changed (Pro): **podcast articles are now as long as the episode gave them, and no longer.** There was a word target — 900-1400 for a spin-off, 2000-3000 for the episode article — and a stretch of conversation carrying one projection and three quotations cannot fill it honestly. So it was filled dishonestly: one measured article ran to 1,483 words in which the same population projection was restated under four of its six headings, its timestamp printed five times, its two years eight times each, and the focus keyphrase used fourteen times with all six headings carrying it.
* None of that was the writer breaking a rule. Every anti-repetition rule was already there and every one of them lost to the number, because a length target on material of unknown size is an instruction to pad. The target is gone. The size is counted from what that article was actually given — its verified quotations, figures, the speaker's own qualifications and the objections put to them — at roughly one section per two of those, and the article stops when the material does. Expect shorter articles, and expect the same episode to produce articles of noticeably different lengths.
* Fixed (Pro): **two headings counts contradicted each other.** The spin-off rule asked for four to six sections while the running-order shapes asked for "5 to 7" and "4 to 7" — and the shapes were added to the prompt last, so the looser number won every time. The size rule is now the final word on it.
* Changed (Pro): **counts that were per-section are now per-article.** A per-section allowance is an allowance a writer spends: "one keyphrase per section" across six sections produced fourteen uses, and "at least one short sentence per section" produced a third of the article in clipped fragments. The keyphrase is now three times in the whole article and at most one heading; short sentences are fewer than one in eight, never two side by side. Each figure and each timestamp is used once and never repeated.
* Changed (Pro): the writing brief now comes **before** the rules rather than after them, and says plainly that the rules are a floor rather than the assignment. The prompt had grown to roughly ninety prohibitions, and an article that breaks none of them can still be dull and padded — which is what was shipping.
* Added (Pro): the pre-publish notes now catch what nothing could see before — the same figure repeated through an article, the same moment cited over and over, the keyphrase sitting in more than one heading, and an article written mostly in fragments. All four are counts you can confirm yourself, and all four fire on the article that prompted this work.
* Fixed: a sentence counter split on abbreviations, so "Jordan B. Peterson" and "U.S." each manufactured extra "sentences" and made every rhythm measurement wrong.
* Browser extension **v1.0.12**: the popup's "Read a transcript now" box is gone — the **Read this page** button and the paste-a-link field with it. Reading is the plugin's job and the popup has no way to hand a transcript to anything, so a read started there finished into storage with nothing waiting for it. **See the last transcript read** is unchanged and is now the whole box.

= 2.5.7 =
* Fixed (Pro): **a new chapter could put one person's words under the other person's name.** Spotify's transcript is one flat list carrying three kinds of marker: a speaker label, a chapter heading, and the lines themselves. A speaker label stays in force until the next label, which is why it is carried forward — but a **chapter heading is not a label**, and a chapter is very often exactly where the conversation changes hands. Spotify writes no new label there, so the previous speaker ran straight on into the next person's words, silently and with nothing anywhere to say so. Reported on a real episode: the host opens a new chapter by reading out Census Bureau population projections, and the article credited every figure to the guest — *"the Census Bureau figures Peterson cites"*.
* A chapter start now means the recording has **stopped saying** who is talking, so nobody is named until it says again. Nothing tries to work out who the new speaker is: a passage that begins a chapter is quoted with no name rather than under a guess, which is the same choice this feature makes everywhere else, and you can still name it yourself on the plan screen. A chapter that does open with its own speaker label loses nothing. The read tells you how many chapter starts were affected, because it is a real trade and not something to do quietly.
* The chapter times were already being sent by the browser extension — it separates headings from speaker labels while reading Spotify and hands over both — and the plugin had simply never read them. Nothing about the searchable recording changes: the markers are lifted back off the words before anything is searched, exactly like the speaker labels and the caption timings, so every quotation still verifies byte for byte.
* How often this happens is worth stating plainly, because it is not an occasional glitch: on the reported 203-minute episode, **not one** of its 26 chapters carried a speaker label. Spotify has a single title slot per marker and a chapter takes it, so the label for whoever opens the chapter is never written — including at the very start of the show, where the host asks the first question and is never named at all.
* Browser extension **v1.0.11** does the other half and is worth updating for. The extension no longer carries a speaker through a chapter, so the wrong name never reaches your website at all. And when Spotify names that speaker again a moment later, the extension now passes the label on rather than skipping it as a repeat — it was being dropped because it matched the name still held from before the chapter, which meant attribution stayed switched off far longer than the recording actually required. On the reported episode the unnamed stretch after the chapter fell from about two and a half minutes to forty seconds. An older extension breaks nothing; those passages simply stay unattributed for longer.
* Also in v1.0.11: an episode you **already have open in a tab** used to be read quietly in place, without clicking or scrolling. On screen a chapter heading and a speaker name are the same bold line, so that read cannot tell where the chapters are — and an article was being written on attribution the extension could not stand behind. It now opens its own tab for a few seconds instead, whenever the episode names its speakers. Episodes with no speaker labels have nothing to get wrong and are still read straight from the tab you have open.
* Fixed (Pro): **every quotation was credited twice.** The plugin prints "— Jordan B. Peterson (1:18:41)" under each pull quote, built from checked data, and the writer is told not to write one itself. It obeyed — and then wrote the same thing again underneath as an ordinary paragraph, which is not a credit line, so nothing was looking at it. The result was the guest's full name and the timestamp printed twice under every quote in the article. The sentence after a quotation may no longer name the speaker again or repeat that quotation's moment, and where one still gets through it is now removed from the finished article — and the removal is reported, because a paragraph deleted from your article is not something to do in silence.
* The removal is deliberately narrow, and the test is a whitelist rather than a pattern: the sentence goes only when everything left after taking out the name and the moment is filler the plugin recognises by name. One word it does not recognise is content, and the paragraph stays. So *"Jordan B. Peterson says that at (1:16:44)."* is deleted, and *"Peterson says that at 1:18:45. His point is that bitterness and revenge do not merely express suffering…"* is left exactly where it is — a redundant opening on a paragraph that carries the argument is a wording problem, not a duplicate, and deleting it would delete the article.
* New (Pro): **the episode links carry their service's own mark.** The red YouTube badge and the green Spotify circle now sit beside *Watch this episode on YouTube* and *Listen on Spotify* at the foot of every article — the real logos in their real colours, identical on every device, shipped as two ~600-byte files inside the plugin so nothing is fetched from anybody else's server. The **subscribe link takes the mark of wherever it actually points**, which is not always the episode's: you can quote the Spotify recording and grow a YouTube channel, and a green Spotify circle beside a link to youtube.com is exactly the small wrongness that makes a reader distrust everything around it. Read from that link's own host, so a URL that merely mentions a platform in a query string gets no icon rather than the wrong one. A link to anything else — an Apple Podcasts page, say — is published unchanged, with no icon and nothing broken.
* The obvious way to do that does not work, which is worth recording: WordPress deletes inline `<svg>` from post content, so an icon written that way disappears the moment the post is saved and only the link text survives. An image built from a `data:` URI fares no better — `data:` is not an allowed protocol, so the address is mangled into a broken path. Both were run through WordPress's real filter rather than assumed, and there is now a test that keeps them that way.
* Fixed (Pro): **a podcast article could open with its own keyphrase pasted in as a sentence.** A spin-off titled "Is cynicism helpful after naivety breaks?" was given the keyphrase *cynicism helpful*, and the SEO rules every article follows say the keyphrase goes in the first sentence and then at a steady density down the page. So it opened *"Cynicism helpful is the question people ask right after something breaks"* — not English, and the shape of a title that has fallen into the body — and then said the same two words four more times, each sentence bent around them. Podcast articles now override those placement rules outright: a keyphrase that cannot be spoken aloud as an ordinary phrase never appears in that form, the exact phrase is used at most twice in a whole article and never twice in one section, the article never opens with it, and no heading is allowed to repeat the title. You lose nothing for it — Yoast and Rank Math read word forms and variants, and a sentence nobody could say out loud was never ranking anyway.
* Improved (Pro): **the register these articles are written in is now stated, not left to a dropdown.** *Blog* and *Conversational* reach the model as two bare words at the top of an instruction sheet thousands of characters long, and by the time it starts writing they are gone. What suits an episode is a reporter's discipline with a talker's surface — everything attributed and nothing asserted, but in short sentences, ordinary words and the second person, with the point in the first line rather than after a run-up. That is now written in as countable rules: most sentences under 22 words, at least one under eight in every section, concrete before abstract in every paragraph, no sentence opening *It is worth noting*, and no adjective telling a reader that something is interesting. Show them the line your guest actually said and let them decide.
* Removed (Pro): **the Opinion style is gone from the Podcast tab.** Every other rule in this feature exists to stop an article having a view of its own about a real person's ideas. A dropdown asking for one out-argues all of them.
* Improved (Pro): **five more shapes of the article's own opinion are now reported before you publish.** All of them came off one spin-off, and all of them walked past the existing checks because none names a weakness, a ranking or a verdict: *"That line matters because…"*, *"That is where the argument sharpens"*, *"the answer he gives is narrow but clear"*, *"his wording is moral and direct"*, and the article talking about itself — *"This is where the title's second half gets its answer."* Milder than a verdict, and still a third voice in an article that is only supposed to have two.
* Improved (Pro): **three things that made a finished article sound like a machine, all of them measured across nine articles from two different episodes rather than guessed at.** Each one turned out to be the writer obeying a rule too literally rather than breaking one, which is why none of the existing checks could see any of them. The guest's full name written out fifteen times in 1,600 words, because one rule says attribute positions by name and another says write the name exactly as given — the permission to use the surname alone was already there and simply never taken, so it is now a count: full name twice, surname after that. Six sections in a row opening by turning their own heading back into a clause — *"Confidence grows once you begin because…"* under a heading asking how confidence grows — because the AI-answer rules ask every section to answer its heading and stand alone if it is lifted out; it still must, but not by echoing it. And the same anecdote appearing in four of six sections, because every section is checked for carrying something specific and none was ever checked for carrying something **new**. A story, an age, a weight or a study now belongs to one section; if two sections need it, they are one section.
* Fixed (Pro): **and one formula that survived three separate versions of "do not comment on delivery".** *"Peterson's answer is blunt:"*, *"Her claim is direct:"*, *"His sequence is severe and specific."* It reads as scene-setting and it is the article grading how a real person speaks, sitting in the opening sentence where it does the most damage. It is now banned by its exact shape rather than by its category — a person's answer, claim, point, wording or version, followed by *is* and an adjective — and reported in the pre-publish note wherever it still gets through. Let the sentence be blunt; don't announce that it is.
* Fixed: **opening a long note in the Queue tab closed itself again a few seconds later.** The Queue polls every seven seconds so progress from WP-Cron appears without a refresh, and that poll rebuilt the whole jobs table — so **Show more** looked like it had an automatic **Show less** bolted to a timer, which on a podcast batch is exactly the thing you opened the tab to read. Which notes are open is now remembered outside the table, and an unchanged poll leaves the table alone entirely, so a note you are part-way through selecting stays selected too.
* Improved (Pro): **the pre-publish note now counts the two repetitions nothing else could see** — the exact keyphrase repeated past a sensible density, and the guest's full name written out on every mention. Counted, never repaired: which of fifteen mentions to cut is a writer's decision.
* Fixed (Pro): **a table could pass every rule and still be worthless.** The rules checked which columns were allowed; nothing read the cells. A published table had entirely legal headings, and a column headed **Figure cited** carrying nothing but timestamps, two empty cells, a speaker cell naming two people, and every row a shorter version of the paragraph above it. A conversation has nothing to compare, so a table on this tab is now optional and usually wrong — and if one is written it has one fixed shape (**Topic | What was said | Who said it | When**), every cell filled, one name per speaker cell, three rows minimum, and explicit permission to write no table at all. The finished tables are then read as markup, cell by cell, and an empty cell, a time in a column that is not about time, or two names in one speaker cell are reported in the pre-publish note. Reported, never repaired: deleting a column is an editorial decision.
* Changed (Pro): **Spotify's episode description is no longer read anywhere.** What Spotify serves is a share preview — the first couple of hundred characters of your notes with its own *"Listen to this episode from…"* line in front and the sponsor block below the cut. That would be a manageable half-measure; what made it a bug is that it was winning. On a Spotify or a Both-mode run it took the **Episode description** box — the box that outranks every other source — so the same episode's complete YouTube notes were displaced by a blurb and no longer visible anywhere on the plan screen. The description now comes from YouTube, or from what you paste, and from nowhere else. Both mode fills the box from YouTube automatically, which is one more reason the second address earns its place. On a Spotify-only run there is nothing automatic: paste the description, or the articles publish with no sponsor block, and the screen says so where you would look for it rather than on the plan screen afterwards.
* And the sponsor badges follow. *In both* / *YouTube only* / *pasted only* now appear only when there really were two sets of notes to compare — a pasted description alongside YouTube's. With one source there is nothing to compare, so no badge is shown, rather than every row reading "YouTube only": true, useless, and it reads as a warning.

= 2.5.6 =
* New (Pro): **Podcast to Articles reads Spotify, and Spotify knows who is talking.** Paste an open.spotify.com episode link where the YouTube one goes and everything works the same way — except for the thing that has limited this feature since it shipped. YouTube's automatic captions mark nothing: no punctuation, and no speaker. Spotify's transcripts arrive punctuated and diarised, marked with where one person stops and the other starts. So on a Spotify episode the question "who said this" is no longer a guess to be checked, it is something the recording states, and every quotation is attributed from it.
* The labels are lifted off the words before anything reads them. That sounds like a detail and it is the whole thing: leaving "Speaker 2" sitting inside a sentence would stop genuine quotations matching the recording at all, which is exactly what the caption timings used to do before they were pulled out the same way. Proved rather than assumed — a real three-hour episode with ninety-seven turns labelled produces a byte-identical searchable transcript to the same episode without them.
* You are asked **one** question instead of thirty, and it gets its own step on the plan screen: **Who is speaking**, above the quotations rather than inside them. A row per voice, each carrying the first real thing that voice says, how much of the episode it holds, a link to go and hear it — and a name we think it is, with the reason printed beside it. That single answer attributes every quotation in the episode, and the quotations table below then *reports* it rather than asking again, because the recording has already answered and thirty dropdowns invite somebody to overrule the evidence line by line.
* And the name offered is a reading of the recording rather than a coin toss. The old default — whoever talks most is the guest — is true often enough to be useful and wrong in exactly the case that matters, an episode that opens on a clip of the guest or a host who does most of the talking. So the stronger signal is used first: **who says whose name**. A host says the guest's name constantly, introducing them, addressing them, reading out their book, and almost nobody says their own — so the voice that names the guest far more than it is named is the interviewer, and that one count settles both voices. Talking time is only the tie-break, and when it *is* the tie-break the reason says "nothing in the recording confirms it". Anything left on *Not sure* is still quoted, just never under a name.
* One case still comes back unattributed on a labelled recording, and it is the one worth having: a quotation that **starts in one person's turn and ends in the next**. Every word of it is real, so no other check here could ever see it — and no single name is right for it, because it is two people's words inside one set of quotation marks.
* New (Pro): **the screen asks what you are promoting, and stops deciding for you.** Spotify, YouTube, or both. Until now there were two address boxes and the plugin sorted them by pattern and quietly decided that Spotify wrote the transcript — the right default reached the wrong way, because a podcaster growing a YouTube channel could paste both links and get a set of articles built around the other service without ever being asked. Now you answer that once and the screen follows: one box for the service you picked, its label and placeholder naming it, and a link that does not match is refused by name — *"That is a YouTube address, and you chose Spotify above"* — rather than being re-sorted behind your back. Spotify is still recommended in the choice itself, because its transcript is punctuated and says who is speaking and YouTube's captions do neither.
* New (Pro): **Both mode, for an episode you publish to both — and you choose what your readers see.** Give both addresses and four things become yours to decide: which player goes in each article (YouTube by default, with the other service offered beside your subscribe link), which service the timestamps point at, what happens if those timestamps cannot be matched, and whether the show notes are read from both. One thing is not yours to decide and is shown as a ticked box you cannot untick: **the transcript always comes from Spotify.** That is the reason the mode exists — it is the only one of the two that punctuates and marks every change of speaker — and hiding it would leave you choosing which service to feature without knowing which one the words came from. Two links to the same service are still refused: that is two episodes, not one episode twice.
* New (Pro): **Spotify's words on YouTube's clock, measured rather than assumed.** Both mode can point every timestamp at YouTube even though the words were read from Spotify. That is only honest if the two clocks are reconciled, and they never simply agree: a YouTube upload with a cold open runs ahead of the audio feed by however long that open lasts, and an inserted ad break moves everything after it again. So the episode is read twice — Spotify for the words, YouTube purely for its caption timings — and dozens of passages from across the transcript are located in the other recording, each match giving a real pair of moments whose difference is the offset. A phrase that occurs twice in either recording is thrown away rather than believed, because that is the one thing that produces a confidently wrong answer; anchors that disagree are dropped; and an ad break shows up as a step the map bends around instead of a slope smeared across the minutes either side. The plan screen tells you what it found — *"the YouTube version runs 37 seconds ahead, measured across the episode"* — and the printed time moves with its link, so what a reader sees and where they land are the same moment.
* And when it cannot be measured — a re-recorded intro, a video with no captions — nothing is guessed. You choose in advance which of three things happens: keep Spotify's timestamps, publish with none at all, or stop and let you decide. There is no fourth option where Spotify's seconds get printed under a YouTube link.
* Fixed (Pro): **the pre-publish check was crying wolf on every Spotify episode.** One of its checks asks whether a section carries a moment a reader can go and hear, and it looked for a timestamp link spelled YouTube's way — `t=754s`. Spotify's is `t=754`, without the `s`, which is a difference the plugin has known about for as long as it has supported Spotify. So on a Spotify episode that check could never pass: every section carrying a timestamp and no pull quote was reported as having nothing a reader could hear. False, on every article, in the mode the plugin actually recommends. It survived because the test for it only ever built a YouTube article; there is now one that builds the same article under both services and would have caught it on the first run.
* Improved (Pro): **the "check these numbers" note reads by sentence instead of by number.** One sentence about a report on "ages 18 to 25" carrying "34% loneliness" is one thing to go and confirm, and it was being printed as three findings with the same hundred characters repeated after each — a note four times longer than the problem, which reads as an article in trouble rather than a sentence to check. Same numbers, same warning, grouped: *"3 numbers … in 1 sentence (18, 25, 34 — …)"*.
* Improved (Pro): **long notes in the job list fold up.** Every article in a podcast batch gets a pre-publish note, and a column of twenty-line notes is a checklist nobody reads. They now clip to three lines with a **Show more** beside them. Nothing is truncated — the whole note is still in the page, still selectable, and the CSV export was never affected.
* Fixed (Pro): **an episode that arrived twice was being read twice.** On a video whose transcript panel has been opened before, YouTube leaves the old panel sitting in the page — so asking it for every caption line hands back the whole episode twice, in order, seamlessly. Caught on a real 3h23m episode: 3,848 caption lines where the recording has 1,924, the second half byte-identical to the first. Nothing could see it. Quotations still verified, because a search finds the first copy; timestamps still landed, because the first copy carries the real ones; the articles read normally. What it cost was the read — **twice the passes and twice the requests, on every YouTube episode**, which on a three-hour show is around ten wasted requests. Fixed at the source in the browser extension, which now reads one transcript panel rather than every panel the page is holding, and undone in the plugin as well so an extension already installed stops paying for it today. Strictly: whole identical copies only, an exact number of times — a show that really does repeat a line is left alone.
* And the one thing that DID notice is worth saying out loud, because it is the argument for the check: the clock map refused. It is the only part of this that requires a phrase to have been said exactly once, so a doubled recording made every anchor ambiguous and it reported that the two versions could not be lined up rather than inventing an offset from them. It now also says *which* of the five ways matching can fail actually happened — never found, found twice, found untimed — instead of a bare count, because "0 passages matched" is a dead end and "most of them turned up more than once, which a caption track that repeats each line as it scrolls does" is something you can act on.
* Improved (Pro): **and then each quotation is anchored on itself.** Passages spread across the episode measure the offset *somewhere*; a quotation is where the offset is *spent*. So once the episode has been read and the quotations are known, every one of them is looked for in the YouTube captions too, and each one found puts an anchor exactly where a timestamp is about to be used — which is what stops a quotation sitting near an ad break being given the offset from the wrong side of it. It costs no extra request, because those words were already checked against the recording. Matched on a **short run of words** rather than the whole sentence, deliberately: two speech-recognition passes over the same audio disagree over a word constantly, and one "gonna" against one "going to" would lose the whole match. And it earns nothing for where it came from — a quotation said twice is thrown away like any other repeated phrase, and an anchor claiming an offset no neighbour supports is dropped however well its words matched. A quotation that anchors nothing still gets its timestamp from the anchors around it, exactly as before, so this can only ever add accuracy. The plan screen says how many were found on both recordings.
* New (Pro): **the Spotify episode's own picture.** In Spotify mode the article images are built from the episode's artwork rather than nothing — read from Spotify's public oEmbed endpoint, which answers from any host including the shared ones where nothing else about Spotify works, and falling back to the picture the extension saw on the page. On a show that commissions artwork per episode that is your guest's face. Both mode still prefers YouTube's thumbnail, which is 16:9 and therefore already the shape a featured image wants.
* Improved (Pro): **each sponsor says which set of notes it came from.** When the notes are read from both services, every row on the plan screen carries a small badge — *in both*, *Spotify only*, *YouTube only*. "In both" is reassurance; one platform on its own is the useful fact, because that is the platform that truncated your notes and the sponsor you would have lost by reading only the other one.
* Fixed (Pro): **and in Both mode that badge could only ever say "in both", because the second platform's notes were overwriting the first's.** The browser puts the notes it read into the Episode description box so you can see them and correct them — and what is in that box outranks everything else, correctly, because it is the one version you can check. In Both mode it was being written twice: the words' platform first, then the *other* platform's on top. So the description the episode was planned from was the second platform's, the two things the sponsor check compares against were the same text, and every sponsor reported as found on both. The badge was the visible half. The cost was the invisible half: a sponsor link only one platform carried failed the check for not appearing in "the description" and was dropped, on every Both-mode episode, which is precisely the loss reading both sets of notes exists to prevent. Only one platform's notes ever reach that box now — the one that supplied the words — and the other travels beside them where it always should have. When the words' platform gives no notes at all, the other's are used and said to be used, rather than reported as no description at all.
* Fixed: **and the one route that always works was unreachable from the one function that exists to use it.** Spotify's notes are best taken from the response the player itself downloads — no request, no allowance, complete by definition — and catching it means the extension's wrapper being in place before the page runs a line of its own. The notes-only read never installed that wrapper. So the path whose entire job is the show notes could only ever reach the two fallbacks: an allowance that runs out for hours, and then the collapsed screen. The three routes now live in one function that both paths call, which is also the point — this drifted apart because the same decision was written twice.
* Fixed: **the extension could not get Spotify's whole notes from a tab you already had open.** An episode you have open is read passively — no clicks, no scrolling, nothing that disturbs a page you are using — which is right for the transcript and hopeless for the notes, because both of the routes that get them whole need something a passive read is not allowed to do: the player's own download needs the extension's wrapper in place before the page loads, and the expander needs clicking. So on that path the notes could only ever be whatever was on screen, which on a collapsed description is the first three lines with every sponsor read missing from underneath. It now notices that what it is holding is cut off, opens a tab of its own, reads them properly and closes it. A few seconds, and only when needed. Needs extension v1.0.10.
* And a refusal is now said in words instead of looking like a short episode. When Spotify will not hand over its own copy, the read says so, says roughly how many hours the lockout has left, and names the one thing that actually fixes it — signing in to Spotify in that browser, which uses your own much larger allowance. Everything needed to work this out had been recorded for two versions, in a debug blob nobody reads.
* Improved (Pro): **unticking "read the show notes from both" now means it, everywhere.** The second platform's page was still being opened for notes the server then discarded — a tab opened for nothing, and a line on screen promising a cross-check that was not going to happen.
* Improved (Pro): **the episode's own service is named correctly throughout.** Timestamp links are built the way each platform spells them (YouTube wants `t=754s`, Spotify wants `t=754` — the other form silently starts at the beginning), the closing link says *Listen* or *Watch* as appropriate, a Spotify show page is accepted as your channel address and its link says **Follow** because that is what the button on that page says, and the default call to action names the right service. A podcaster who has typed their own call to action keeps it exactly as typed.
* Fixed: **the extension was handing over the comments instead of the show notes.** On Spotify the description, the comment thread and the recommendations live in one scrolling panel, so reading the panel returned a description that stopped mid-sentence and then continued as strangers talking to each other — and the sponsor parser went looking for a "Sponsors:" heading inside somebody's reply. The notes are now cut at the point the page starts again, and a candidate that is still a comment thread after that cut is discarded rather than used.
* Fixed: **the show notes are no longer read off the screen if there is any way around it, and now arrive whole.** Spotify collapses a description to three lines behind a "… Show more", and getting the rest by finding and clicking that button failed twice in two different ways: an exact "Show more" match never fired, because the button says "… Show more" — the ellipsis is the end of the truncated sentence and part of the control. And once that was fixed, the sweep looking for the button had nowhere to look on a build that marks up its tabs without ARIA roles, because the code that READ the notes knew about that container and the code that OPENED them did not. Both failures had the same shape, which is the worst one available: a description arrived, it read completely normally, it was the visible three lines cut off mid-word, and every sponsor read below the fold was simply absent with nothing anywhere reporting a problem.
* So the notes are no longer taken off the screen where anything else will do — they are taken from **the response the player itself downloaded**. A page cannot render a description it has not fetched, and that response already passes through the wrapper the extension installs to catch the transcript. Keeping it costs no request, no token and no allowance, and it is the complete text by definition, because the collapsing to three lines happens afterwards in the browser to text it already has. Spotify's public Web API is the fallback behind it, and the screen is the fallback behind that.
* That API is only the fallback for a measured reason worth writing down: asked without a signed-in Spotify session it allows a handful of requests and then answers **429 `QUOTA_EXCEEDED`** with a `retry-after` measured in *hours* — 77,673 seconds in one measurement, 44,112 in another, and a different address does not clear it. The allowance belongs to the network rather than to the request, so a brand-new anonymous token from the same connection is refused on its first try. So the extension prefers your own Spotify session when the browser has one, caches each episode's notes for a week (reading the same episode twice is what a person actually does), and when the allowance *is* spent it says so, in hours, rather than retrying quietly.
* And it now reports what happened. The read says how many characters of description came back and whether they came from Spotify or off the page, and the extension's preview page shows the same line — because "short notes" and "the top third of long notes" are indistinguishable by eye, which is exactly how this survived three fixes.
* Fixed: **a description from an earlier read could outrank every read after it.** What you paste into the Episode description box outranks everything on the server, correctly — you can see it and the server cannot. But the box was filled only when it was *empty*, so the first read's text sat there winning every subsequent run: re-reading the episode changed nothing, fixing the extension changed nothing, and the screen never said why. A re-read now replaces what the plugin put there and still never touches a word you typed or edited yourself.
* Improved: **the extension stops taking you off the page.** After a read it opened a page of its own showing exactly what it got — the transcript, the show notes, the caption timings — which is worth having and was landing you on it, several tabs from the WordPress screen you were waiting on. Opening it *behind* you and handing the focus back was tried and is not good enough: the reader closes its own tab at almost the same moment, and one ordering assumption is all it takes to be dropped on a debug page mid-task. So a read the plugin asked for now opens nothing at all. The transcript is still there to look at — the plugin already shows it in its own "What the extension read" box, and the extension's popup has a **See the last transcript read** link. Asked for from the popup, the preview still opens in front, because there, showing it is the request. Needs extension v1.0.7.
* New (Pro): **the commas go into a quotation, at last.** Automatic captions carry no punctuation whatever, so a checked quote reached the plan screen as one forty-word breath — "this is who I am and if you don't want me that's a drag because I'm looking for a job but by the same token I'm not going to pretend to be someone other than who I am" — every word right and nobody able to read it. Until now the plugin added a capital and a full stop and stopped, because a rule genuinely cannot place a comma: knowing that "if you don't want me" ends before "that's" means reading the clause, and a rule that guesses the boundary wrong moves a qualifier from one clause into the other, which is a change of meaning wearing the costume of a typographic fix. So once the quotes are checked and trimmed, they now go through one more pass whose only job is punctuation.
* And what makes that safe is not the instruction, it is the check afterwards. Every punctuated line is stripped back to bare words and compared with the bare words that went in, and anything that is not identical is thrown away and the original kept. A word added, dropped, replaced or reordered all fail that comparison — and so does a helpful one: where the captions misheard "Sapolsky" as "spolski", the punctuation pass is not allowed to repair it, because a mishearing is corrected on the names table by you, where you can see it happen. The plan says how many lines were left alone for this reason. The worst this step can do is give you back the quotation exactly as it was.
* The pass runs after the plan appears rather than inside it, so nothing waits on it, a slow or unreachable model costs you commas and nothing else, and a row you have already started editing is never overwritten.
* Improved (Pro): **the Podcast screen stopped being a wall of text.** Every explanation on it had been earned by somebody not being able to work something out — and all of them on the page at once made four decisions look like a page of reading, which is how good advice goes unread. The long ones are now folded into a small **ⓘ** beside the thing they explain: hover it, tab to it, or click to pin it open on a touch screen. What stays unfolded is anything reporting *state* — a warning, a count, something that just went wrong — because a hint can wait to be asked for and a warning cannot.
* And the first line of that screen lost its ⓘ, because the icon opened a bubble that said the same thing the sentence beside it already did. An explanation that repeats its own heading is a click that costs you nothing and teaches you nothing.
* New (Pro): **the names table now says when each one was misheard, as a link into the video.** "Names the captions got wrong" asks you to approve a rewrite of something a person actually said, and on the page *isai bin* → *Isaiah Berlin* is a guess you are being asked to trust — out loud it settles in four seconds. The check that proved the mangled spelling is really in the recording already knew where it was, so the moment costs nothing to work out. Retype the left-hand box and the time disappears with it: it belonged to the words that were there before, and a link that opens the video on something else is worse than none, because you cannot tell whether the correction or the plugin is the thing that is wrong.

= 2.5.5 =
* Fixed (Pro): **the read no longer guesses who spoke, because it cannot.** It was being asked "who said this, if identifiable" about a transcript with no speaker labels, and it answered anyway — then the plan screen offered that answer as the pre-selected default. On one real episode three consecutive lines of the guest's, in his own idiom, arrived pre-set to the host. A wrong default on a screen whose entire job is asking you to confirm is worse than no default, because leaving a row alone is how you agree with it. The question is no longer put to the read at all. Rows now start where they always should have: the guest by default, nobody on the lines the recording flags, and your answer over the top of either.
* New (Pro): **the tic on the end of a spoken sentence is trimmed off the quotation.** Twelve quotes out of twelve in one real plan ended the same way — "there's no indecision right", "ask stupid questions right" — the speaker checking you are still with him. Under his name in quotation marks it reads as a transcript nobody proofread. Trailing tics and leading scaffolding ("so", "you know") now come off. Only the ends, and only ever by deleting: no word is changed, added or moved, and the result still has to be findable in the recording. "Right" carries its own guard list, because "you have to get it right" and "do what's right" end on the point of the sentence — and so does "the young adults are not okay", which an early version of this cut to "the young adults are not".
* New (Pro): **quotations are punctuated.** Automatic captions have none at all, so a checked quote reached you as a lowercase run-on. A capital, a full stop and a lone "i" made into "I" are added; commas are not, because a comma decides which clause a qualifier belongs to and guessing one puts a meaning in somebody's mouth. The article's writer is separately told to punctuate what it quotes properly — it has the sentence in front of it.
* New (Pro): **verified is not the same as worth printing, and now it says so.** Alongside every quotation the plan screen says whether it stands up on its own. "Checked and correct, but probably not worth an article" for a line too short to carry a thought, or one that opens by pointing at something the reader cannot see — "that's what love should do" is a complete sentence in the room and a riddle on a page. Advisory only: every row stays ticked and nothing is deleted, because "thin" is a matter of taste and the words are not.
* Improved (Pro): **a solo episode names its one speaker.** With one voice on the recording there is nothing to get wrong, and the "who said what" table is not even shown — so every quotation was publishing as "unidentified speaker", which is absurd on a show with one person on it.
* Improved (Pro): **the plan screen says when a recording has no timings at all.** Captured without them, every quotation shows a dash where its moment should be and the finished articles carry no timestamps. That looked like a broken column; it now says what it is and what to do about it.
* New (Pro): **every pull quote now carries its speaker and its moment, because the plugin puts them there.** A quotation is only worth anything if a reader can check it, and that needs three things on it: the marks, a name, and the point in the recording. Across three test versions of one article the writer supplied a different *two* of them each time — one dropped the quotation marks, the next carried the speaker and the timestamp, the next carried the marks and neither. So it is no longer asked for. The writer supplies the words and the plugin adds the credit line beneath, from data that was checked. Where nobody could settle who spoke, the line says **unidentified speaker** out loud — a bare quotation in a paragraph about one person has been attributed to that person whether it names them or not, and that is exactly how one line of the host's went out as the guest's in four articles running.
* New (Pro): **the quotations on the plan screen are yours to fix, and to listen to.** Automatic captions mishear — "Yung" for "Jung", "naivity" for "naivety" — so the **Who said what** table now lets you correct the words as well as the speaker, and shows the moment each line was said as a link that opens the video right there. Settling who spoke takes four seconds of listening; hunting for the line in a three-hour recording does not. What you cannot do is write a quotation: whatever you type is looked up in the recording again, anything that is not there is left out and reported, and an edited line is re-timed from where its words actually are.
* New (Pro): **articles can carry the moment the conversation pushed back.** An article's only balance has always been what was actually said on the recording, and half of that was out of reach — a transcript with no speaker labels cannot tell you the host challenged the guest. But it can tell you a challenge happened and what the answer was. Those exchanges are now handed to the writer with their timestamps, along with a flat ban on naming who asked or who answered: "the objection put to that is…", never "the host challenged him". The markers are deliberately strict, because a wrongly-detected objection does not produce a weak sentence, it produces an argument nobody had.
* Fixed (Pro): **a percentage the read missed is picked up off the transcript.** Where somebody reads a study out loud, the numbers come in a run — and a summarising pass reliably returns three of four, dropping a different one each time. For every verified figure, the caption it was said in and the one after are now searched for a percentage nothing extracted, and it is added with the words that follow it. It only fills gaps in a run already found, so nothing can arrive from a part of the episode that was never read.
* Fixed (Pro): **an unattributed quotation is flagged when the passage around it names only one person.** The check for this used to look for a "he" in the next sentence. The fourth time one line went out as the wrong person's, there was no "he" — the quote simply sat in a section where every other sentence named the guest, and the paragraph did the attributing. If exactly one person is named near an unplaceable quotation, you are now told before you publish.
* Fixed (Pro): **several checks were reading the article with its paragraphs welded together.** Stripping the HTML tags out of a finished article joined the end of one paragraph to the start of the next — "…are not okay.Peterson ties that" — which broke the sentence boundaries three separate checks depend on. One of them was the misattribution check above, so the very sentence it exists to catch was invisible to it, and the warnings it did produce quoted several paragraphs as though they were one.
* New (Pro): **no ranking the speaker's own arguments.** "This is where his argument becomes strongest" awards one part of somebody's case a prize, which is an opinion, from a voice the article is not supposed to have — and nothing was said at that moment about which part was the good part. Saying where an argument *goes* is still fine; that is what a signpost is for.
* Fixed (Pro): **the article is no longer told a machine's guess was your answer.** The read supplies a speaker for most quotes, and it arrives in the same field your choice does — so a guess was being passed to the writer as "confirmed by the site owner", which is precisely the inference the speaker table exists to replace. Only a row you actually saw counts as settled.
* Fixed (Pro): **each article now quotes the part of the episode it is actually about.** Quotes were shared out between the articles by position in a list, which took no account of subject — so an article about young adults and mental health, a topic running from 1:22 to 1:29, was given quotes from 1:01, 1:04, 1:08 and 1:18 and told to use them. Every one was word-perfect, correctly attributed and correctly timestamped, and every one was about something else. Nothing could catch it, because nothing about the words was wrong. Each article's subject is now located in the recording, and it is only offered quotes and figures from that stretch. If it has none of its own it gets none at all and is told not to use quotation marks — a missing pull quote is a far smaller problem than a misleading one, and anything that slips through is flagged before you publish.
* Fixed (Pro): **an article that covers several parts of an episode now quotes all of them.** The change above finds where an article's subject sits in the recording — but it could only ever point at one place, and plenty of articles are not about one place. An article pulling together what a guest said about truth, lying, image and persona draws on four passages spread over three hours; it was placed on the opening four minutes, which won by a single point over a passage near the three-hour mark, and every quote it received came from there. All four were word-perfect and correctly timestamped, and three of the article's five sections carried a quotation about a different argument. The opening of an episode wins this by default, because the first minutes touch every theme at once — so any article whose subject was spread quietly ended up quoting the introduction. An article is now placed on every part of the recording its subject genuinely occupies, and its quotes are taken one from each in turn. Articles about a single passage are unaffected.
* Fixed (Pro): **an approved caption correction no longer strips a real quotation.** Corrections you approve on the plan screen are applied to the finished article, quotation marks included — so a quote the recording heard as "naivity" reached the final check reading "naivety", matched nothing, and had its quotation marks removed. The words then stood as the article's own, which is exactly the failure that check exists to prevent. Both spellings are now accepted.
* New (Pro): **your guest's own phrasing can no longer pass as the article's.** Every check so far asked whether quoted words were really said. This asks the opposite: an article carried "if you tell a sufficiently seductive lie, people do not fall for you" in its own voice — seven words straight off the recording with no quotation marks on them, so nothing flagged it, and the guest's own formulation read as the writer's. Any run of six or more words lifted from the recording and written as the article's own is now reported before you publish, with the phrase shown so you can find it. Names and the figures you were given are excused; there is no other way to write them.
* New (Pro): **you say who said it.** The recording can prove the words; it cannot prove the speaker. YouTube's captions carry no labels, so on a two-person conversation the plugin was inferring — publishing the ambiguous lines with no name, and quietly letting everything else default to the guest. Neither is reading the recording, because the recording does not say. So the plan screen now has a **Who said what** table: every checked quotation, the moment it was said, and a dropdown of the people in the episode — the host by name, the guest, anybody else. Leave a row alone and nothing changes from before; set it and your answer beats every guess in the system. Choose *Not sure* and the quote is still used, just never attributed to anybody — not even by a "he" in the next sentence. Untick a row to drop the quote. The plugin re-checks every quotation against the recording on the way back, so the screen can change who said it and never what was said.
* Fixed (Pro): **the host is a person in your articles now.** Seven versions never named the interviewer once. That was not only a missing credit: with one person named, every quotable line had one plausible owner, so the host's own sentences were written up as the guest's. The host is asked for by name, offered in the table above, and named in the writing where a line or a challenge is theirs.
* New (Pro): **the names from your own passage, handed to the writer.** An article's section is required to carry something specific from the recording, and a proper noun always counted — but only if the writer happened to include one. A section narrating the job-market passage came back as "he ignored warnings about the academic job market" for minutes that name the university out loud. The people, places, institutions and works spoken in an article's own stretch are now dealt to it like its quotes and figures, correctly spelled, each with the moment it was said — which also gives a section with no pull quote and no figure something a reader can go and check.
* New (Pro): **where a speaker qualified themselves, the article keeps it.** The rule saying an article's only balance is the speaker's own caveat has been in the prompt for a long time and had never once been used, because nothing ever handed the writer a caveat to use. Speakers hedge themselves constantly — "that doesn't mean…", "I'm not saying…", "I could be wrong" — and those lines are now found in the article's own stretch and supplied with their timestamps. A hedge sitting right where the conversation changes speaker is left out: there it is somebody disagreeing, not somebody qualifying themselves, and the recording cannot tell you which.
* Fixed (Pro): **a title no longer keeps a quotation mark it never opened.** One shipped as *What Does Jordan Peterson Mean by 'Tell the Truth'?"* — an inner quotation correctly paired and a stray closing double left over from an outer pair, into the title, the slug and the browser tab. Unbalanced marks are removed from the ends; a title that quotes something properly keeps its quotation, and an apostrophe is never touched.
* Improved (Pro): **the plan screen's boxes fit what is in them.** The article title and the "shown as" label for a link were editable in inputs about thirty characters wide, so changing the end of a title meant scrolling inside the box. They fill their column now.
* New (Pro): **a number the article states, that nothing checked.** Every figure taken off the recording is verified. The plan's brief is not — and the brief is the only thing the writer sees, so a number can reach the page having been checked by nothing at all. One did: an article said a named living person had "around 200 such encounters" and went on to say "the number matters in his telling". The recording has the speaker supposing out loud — *you're going to have like 200 encounters like that* — an illustration of what volume does, not a count, and not a count about that person. A supposition had become a fact somewhere between the recording and the plan. Every number in a finished article is now traced back to a verified figure or a checked quotation, and anything with nothing behind it is reported with the sentence around it before you publish. The plan is also told to keep a number's "if" and "imagine" attached, and never to pin a number on a named person who is not the host or the guest.
* Fixed (Pro): **a quotation nobody can be named for is no longer named by the next sentence.** Where the recording cannot say who spoke, the quote is published with no name and the writer is told not to name anybody. It obeyed — and then began the following sentence with "He", which attributes it exactly as firmly. The line in question is the host's, closing his own reading of a report, and it went out as the guest's three times that way. The rule now covers the sentences either side, and an article that still does it is flagged.
* New (Pro): **no telling the reader how a line lands.** "Peterson's warning here is sharp", "his advice is simple and unsentimental", "that line gets at the core of his argument" — milder than judging whether a speaker is right, and still the article's opinion in an article that is only supposed to carry two voices. Reported now, and forbidden in the writing rules.
* Fixed (Pro): **a statistic is credited to the study, not to your guest.** On an interview the host brings the research as often as the guest does — one real episode had the host reading out four percentages from a named report while the guest simply agreed, and the article credited the guest four times in its opening. Figures now carry the report, survey or institution that published them, never a person, unless a verified quote shows the speaker doing the citing. Numbers that were plainly read out to the guest are marked as such.
* Improved (Pro): **a blunt line gets quoted instead of paraphrased.** Where a speaker states something unusually directly and that line is on the verified list, the article quotes it rather than restating it in neutral prose — that sentence is the most useful thing on the page, for readers and for AI search alike.
* Improved (Pro): **numbers read out from a report are captured properly.** A run of percentages from a study used to be recorded as prose and never as figures, so the most quotable block in an episode had no timestamp and no way back to the video. More quotes and figures are now kept from every pass, because an article that may only draw on its own part of the episode needs its own part to be well covered.
* Improved (Pro): **the main episode article quotes the whole episode.** It used to take the first few quotes on the list, which is the order they were said — so a survey of a three-hour conversation quoted nothing after the first half hour. It now takes one from each stretch of the running time.
* Improved (Pro): **fewer, fuller sections in a spin-off.** A 1,800-word article was coming back with nine headings, and one episode subtopic does not carry nine separately-evidenced points — so most of them had nothing from the recording in them. Four to six now, folded together where the material is thin.
* Fixed (Pro): **quotes were quietly losing their first clause.** A quotation that began the same way twice — "if they knock the door will open, if they ask they'll receive…" — was read as a speaker restarting himself, and everything before the second beginning was deleted. What was left was still word for word, so every check passed while the quote lost its opening and its time stamp moved back to the deleted words. Measured across three real episodes, that hit roughly one stretch of ordinary speech in forty. Stutters are still trimmed; a sentence that repeats a phrase for effect is now left whole.
* Fixed (Pro): **a trimmed quote is timed where the trimmed words start.** Before, the (12:34) link pointed at where the untrimmed version began, which could be several seconds before the sentence a reader was sent to hear.
* Fixed (Pro): **the main episode article was being handed no figures at all.** The plan puts each number in the article that covers its subject, which means the spin-offs — so the broad episode article, the one most people read, got none, and was then judged for having no specifics. It now receives the episode's figures whatever its own brief happens to mention, ordered by what it is most about. Spin-offs still only get the numbers that belong to them.
* New (Pro): **the opening has to touch the ground.** The first paragraph can answer the question in the abstract; the one after it has to carry something real — a figure, a person, a study, an age, a place, or a story somebody told on the episode. Two abstract paragraphs at the top is the shape of an article written from general knowledge, and a reader can tell in seconds.
* New (Pro): **each section is checked on its own**, not just the article as a whole. A section with no quotation and no moment a reader can go and hear is now reported by name, so you know where to look instead of hunting through your own article.
* New (Pro): **nothing is put in the host's mouth either.** The rule protecting your guest from invented "quotable" lines now covers the host, who was the easier target — nothing about the host is on the verified list, so an observation written by the AI could be handed to them unchallenged.
* New (Pro): **a speaker quoting somebody else stays a speaker quoting somebody else.** Where a guest retells a parable, cites a study or quotes a book, the article has to say so — presenting a borrowed line as their own doctrine credits them with someone else's view and drops the real source.
* Improved: **grammar now beats the keyphrase.** An SEO phrase is inflected to fit the sentence rather than pasted in whole, so no article opens with something like "accept that take yourself seriously means telling the truth".

= 2.5.4 =
* Fixed (Pro): **most of your best quotes were being thrown away before you ever saw them.** The transcript your browser hands over carries a time stamp every few seconds, and those stamps were being read as words and dropped into the middle of whatever sentence was being spoken — so any quotation longer than one caption line failed its check and was discarded, however exact it was. On a real three-hour episode, five out of five genuine quotes failed, including one short enough to fit on a single line. They now verify, which means the articles are built from what was actually said instead of from the handful of fragments that happened to survive.
* Fixed (Pro): **a quotation inside a sentence is now checked too.** Pull quotes were verified; quotation marks anywhere else in the article were not, and that is where a made-up quote got through — a named guest on record saying something he never said, because the sentence was a paraphrase with quotation marks around it. Every quoted string in the article is now checked against the recording. One that doesn't match keeps its words and loses its quotation marks, so the paragraph still reads, and you are told which one and why.
* Fixed (Pro): **nobody is named as the speaker when the recording cannot say who spoke.** An automatic transcript has no speaker labels, so at the point where one person finishes and the other agrees, a guess goes wrong — the host's line ends up attributed to your guest. Those lines are now published without a name at all.
* New (Pro): **quotes and figures can carry the moment they were said**, written as (12:34) and linked so a reader lands on that second of the video. The times come from the recording, never from the AI — anything it writes that we did not give it is removed before the article is saved. This needs the browser extension updated to v1.0.3; without it everything else works exactly the same, just with no times.
* New (Pro): **the numbers from your episode now have to survive into the article.** Each article is handed the figures its own material mentions and told to place every one of them, with whoever said it named in the same sentence. If any go missing, the job says which — the old failure was silent, and it turned "seven women over 70 outswam him" into "start small and build up".
* Improved (Pro): **quotes are tidied, by the plugin rather than by the AI.** Real speech restarts and repeats itself — "you're the you're your you're the only control group" — and an article that prints that has to apologise for it. Stutters and restarts are now trimmed from verified quotes before they are handed over, which only ever deletes a repetition: no word is changed, added or reordered.
* Improved (Pro): **one spelling of your guest's name**, everywhere in the article — the prose, the tables, the quote attributions. Two forms of the same name split the person in two as far as search engines are concerned.
* Improved (Pro): **articles no longer review how well something was said.** "That line carries a lot", "the phrase lands", "he makes it sound frightening on purpose", "his argument is stronger than ordinary self-help" — that is still the article having an opinion, just about delivery rather than truth. It is now refused in the instructions and flagged in the finished article. A speaker's own qualification of their own claim is kept instead, in their words.
* Improved (Pro): **a table can only hold things that were said.** The column names were already restricted; now the cells are too — an "Example given" column has to carry an example somebody actually gave, or the cell is left empty.

= 2.5.3 =
* Fixed (Pro): **episode images no longer put the image instructions in your Media Library.** The caption and description of every image built from an episode thumbnail were being filled with the text written for the image model — "On the open side, build a layered interior montage…" — which is meaningless to a reader and visible wherever a theme shows captions. Both fields now carry a plain sentence describing the actual picture, written in the same request that plans it, and anything that still reads like an instruction is refused and replaced.
* Fixed (Pro): **everyone on the thumbnail stays in the picture.** A panel episode has three or four faces on it, and the plugin was keeping one and deleting the rest — deciding on your behalf which of your guests mattered. Every person is now kept, in the same arrangement and at the same scale, with the new scene built into the space around them.
* Fixed (Pro): **the words on an episode image mean something now.** They have been wrong twice: a generated question with a word missing ("How Find Meaning?", "What Says About Female Attraction?"), and then a one-word keyword that told a reader nothing — a picture labelled "Meaning". Each image now carries two to four words about that article — "Online Dating Burnout", "The Cost of Status" — written as a phrase rather than a question, so there is no verb or subject to drop. Before it is used it is checked: at least two words, no punctuation, and it must share a word with the article, or it is thrown away and the article's own keyword or title is used instead.
* Changed (Pro): **the alt text describes the picture and opens with the words printed on it.** That is what a reader using a screen reader is missing, in the order they would want it.
* New (Pro): **shorter text is set larger.** Two words get big, heavy type; four are sized down so they still fit inside the safe margin. The margin always wins over the size.
* New (Pro): **the text goes where the original headline was.** If the episode thumbnail ran its headline across the top, yours runs across the top; if it sat beside the guest, yours sits there too — so the picture looks like it belongs to the channel. It is pulled inward wherever that would put a letter near an edge, because never being cropped outranks matching the position.
* Improved (Pro): **one request instead of two.** The scene, the words for the picture and the caption for your Media Library are now planned together, because they are the same act of understanding what the article is about — and a caption written separately describes a picture nobody planned.

= 2.5.2 =
* New (Pro): **Sponsors and links are yours to edit.** The plan screen now shows both lists as editable rows — correct a brand the AI misread, drop one you don't want, or add a sponsor the description never carried. That last one is the case that mattered: a sponsor read that only ran in the audio was previously impossible to include, because everything had to be found in the description to be published at all. What you approve on screen is what gets published, checked only for being a real link.
* New (Pro): **Optional headline on episode images.** Off by default. When on, each image built from the episode thumbnail carries one short question drawn from that article's own title. It is as short as it can be while still being a whole sentence someone would actually say — three words when three words carry the question, five or six when they don't. It is never shortened by deleting a word: "How Do You Find Meaning?" is what goes on the picture, never "How Find Meaning?". The line is placed well inside the frame and clear of the guest's face, with a wide margin on every side, so a theme's cropping cannot cut it off. Left off, the images stay exactly as they were: no text at all.

= 2.5.1 =
* New (Pro): **Episode images built from the episode thumbnail.** Tick one box on the podcast tab and every article in the set gets a featured image built from the video's own thumbnail — your guest's face kept exactly as it is, and everything around them rebuilt to suit that article's subject. The thumbnail's promotional headline is removed and no new text is added, so what you get is a clean editorial image rather than a re-used banner. The thumbnail is downloaded once for the whole episode, so the set looks like one section of a site instead of a dozen unrelated stock photos, and images are always landscape because a thumbnail is 16:9 and a square crop cuts the composition off. This needs an image model that can work from an existing picture — the podcast tab tells you before you start whether yours can, and if the model turns out not to, that article's image is written from scratch instead of being skipped.
* Fixed: **"Empty response from the AI provider" on some articles, and "the AI reply could not be understood" when planning.** Every request was capped at the same small output limit. On a reasoning model — gpt-5.x, o-series, Gemini thinking, deepseek-reasoner — that limit is not the size of the answer: it is the budget for the model's thinking AND the answer together, so when the thinking used it up the reply came back empty and the failure was blamed on the provider. Each kind of request now states what it actually needs, with room to think on top, and a model that turns out not to accept a ceiling is stepped down once and remembered instead of failing. Nothing to configure.
* Fixed: **an article that was cut off mid-sentence could be published as raw JSON.** When a reply stopped early the leftover was written into the post body verbatim and the job reported success. A cut-off reply is now recognised as one and says so, in plain words, with what to do about it — and a half-written article is never published, in the editor or in a batch.
* Fixed: **a cut-off plan no longer throws away the articles that were finished.** A twelve-article plan that stopped mid-word used to be a total loss; what completed is now kept, you are told the plan came back short, and any article that arrived without the episode material to write from is dropped rather than written from generic knowledge.
* Fixed (Pro): **Podcast to Articles published no sponsors and no links on many live sites.** The episode description — where sponsors, discount codes and links live — was read by the server from YouTube's watch page, which works from a home connection and is refused from shared hosting: YouTube answers a datacentre address with a rate-limit or a bot check. The result was an episode that looked as though it had no sponsors, with nothing said about it. The browser extension now reads the description from the tab it already opens (update to v1.0.2), there is an **Episode description** box on the podcast tab to paste it into, and if none of that produces one the plan says so instead of quietly leaving both blocks out. The server read remains as a third try, now with a browser identity and consent cookies.
* Fixed (Pro): **the wrong episode title could be picked up** when YouTube returned a consent or error page instead of the video, because any "title" anywhere in the page could match. Only the video's own data is read now, and the channel name falls back to YouTube's public oEmbed endpoint.
* Improved (Pro): **reading and planning an episode no longer run under PHP's default time limit** — the two podcast requests now lift it the way every other AI request in the plugin already did.

= 2.5.0 =
* New (Pro): **Podcast to Articles.** One episode becomes a set of articles that carry what you actually said. The whole transcript is read, in passes — not the first few minutes — so each article is built from a brief of the episode's own arguments, figures and examples, rather than from generic knowledge about the same topic. Every article embeds the video, links to the others, and ends with a one-click Subscribe link that opens YouTube's own subscribe dialog.
* New (Pro): **Verified quotes — nothing is ever put in your guest's mouth.** Pull quotes are collected while the episode is read, then checked word-for-word against the recording; punctuation and capitalisation may be fixed, but a changed word fails. The check runs again on the finished article, and any quotation the AI produced that isn't on the verified list is demoted to an ordinary paragraph with its attribution removed. This is enforced in code, not asked for in the prompt, because in testing the AI invented a quote after being told once not to.
* New (Pro): **Episode sponsors and links, disclosed properly.** The episode description is read by the plugin itself, straight from YouTube — no browser extension needed for this part. Links under the description's own "Sponsors:" heading are published as sponsors, with every URL and discount code checked against the description character for character; anything that can't be matched is dropped rather than guessed, because a wrong affiliate link sends your audience somewhere you never chose. Everything else the description linked to — the guest's book, their social accounts, your own newsletter — goes in a separate "Links from this episode" list. If a description doesn't label its sponsors at all, nothing is claimed to be one: every link lands in that second list instead, because guessing which links are paid is not a judgement to make on someone's behalf. Disclosure sits above the links (where the rules require it, not below) and every outbound link is tagged rel="sponsored" whether or not it was provably paid — over-marking costs nothing, under-marking exposes the site. Wording editable in Settings.
* Improved: **the Category dropdown now follows the Post type box** in Bulk Publishing and SEO Clusters. Choosing Product previously still listed your blog categories, so the category you picked was silently discarded — a chosen category now applies to any post type, and a post type with no categories says so instead of showing a list that cannot work.
* Fixed (Pro): **the SEO Cluster drip schedule let you pick "Drip" but never showed the timing fields.** The date and interval stayed hidden, and because the hidden values were still submitted, the cluster quietly queued on the defaults — first post an hour from now, then one every hour. Both controls now appear as soon as Drip is selected.
* Fixed (Pro): **SEO clusters ignored categories entirely.** There was no option to let the AI choose one, and cluster posts landed in whatever the dropdown said or in your default category. The AI can now pick one category for the whole cluster — one for the set, not one per article, because splitting a cluster across categories undoes the grouping that makes it work — and you can edit or clear it before anything is written.

= 2.4.1 =
* Fixed (Pro): **choosing a fixed article structure broke the post editor.** Setting Article structure to anything other than "Rotate automatically" — Classic explainer, Question-led or Ranked rundown — made every Add New Post and Edit Post screen die with a critical error, because the editor panel asked for the name of the chosen shape using a function that was never written. Nothing was lost and no setting needs changing; the panel now reads the name from the same list the dropdown itself uses. Present since 2.3.0.

= 2.4.0 =
* New (Pro): **internal linking, and the plugin never rewrites your article to do it.** Bulk batches now link themselves together once every article exists — including drip-scheduled ones, which are linked on day one using the address each post will have when it goes live. The AI only chooses which phrase deserves a link and where it should point; the plugin then wraps that exact phrase, or refuses and says why. Nothing is ever placed in a heading, in a quotation, inside code, or inside a link that was already there, and your wording is never changed by a single word. A second pass gives an inbound link to any post in the batch that still has nothing pointing at it — publishing thirty articles that don't link to each other is publishing thirty orphans.
* New (Pro): **link suggestions in the post editor, in both directions.** One click shows the pages this draft should link to (each anchor is a phrase already in your text — insert it and Ctrl+Z undoes it) and, separately, the older posts that should link *back* to this one. That second list is the one that fixes orphans, and it costs nothing: it is found by searching your own content, not by asking a model. Every suggestion is checked against the real article before it is offered, so if it appears, it will work.
* New (Pro): **SEO clusters.** Turn one idea, one article link, or one YouTube video into a pillar-and-spoke set: a 2,500-3,500 word overview plus 6-14 deep dives. The AI proposes the plan and explains how it divided the subject; you edit, rename or drop anything before a word is written. Each article is told what the others cover so none of them re-treads the same ground, and the whole set is linked hub-and-spoke automatically. It runs through the normal publishing queue, so scheduling, drip, images and retry all work as usual.
* New (Pro): **AI Search (GEO).** People increasingly ask ChatGPT, Perplexity or Gemini instead of searching, and those assistants quote one 200-500 word *chunk* of a page, not the page. Articles are now written so each section answers its own heading and stands alone when lifted out, with real figures, dated facts and comparison tables. A new offline check scores how quotable a post is and lists exactly what would stop an assistant using it — instant, no AI request, no cost.
* New (Pro): **an honest check of whether the AI assistants can read you at all.** Blocking the crawlers that *train* models costs you nothing in visibility; blocking the ones that *search* removes you from AI answers entirely, and most sites that do it never meant to. The settings page reads your robots.txt, says which is which, and gives you the exact lines to paste — it never rewrites the file, because on most sites your SEO plugin owns it.
* New (Pro): **extra structured data, handed to your SEO plugin rather than duplicated.** Your article's FAQ becomes machine-readable questions and answers, along with what the article is about and the outside sources it cites. This is published by Yoast or Rank Math as part of their own data; Antradus never emits a competing copy, and adds nothing if neither is active.
* New (Pro, optional): **count visits arriving from AI assistants** and from the AI crawlers themselves, shown in Reporting. Stores a date, the assistant's name, the post and a counter — no IP addresses and nothing identifying a visitor. Off by default, and the report states plainly that page caching makes these numbers a floor rather than a total.
* Changed: articles may now use real HTML tables. A comparison table is one of the most-quoted things an answer engine can find, and both editors turn them into proper table blocks.

= 2.3.0 =
* Fixed: **generated images arrived as a picture floating between flat colour bars, or with a decorative curve pasted over the photo.** All ten image style presets were written as marketing *banners* — asking for a "thumbnail layout", "decorative shapes" and "clean empty space on one side". Told to design a banner, the model letterboxed the composition and filled the leftover canvas with colour. Every preset is now written as a photograph, and a hard rule on every image demands the scene fill the entire frame, edge to edge, with no bars, frames, borders or graphic accents. Presets you never edited are updated automatically; ones you customised are left alone.
* Changed: **Image Quality now starts on Draft** instead of "Let the AI decide". Let-the-AI-decide picks the most expensive tier: on gpt-image-1-mini it took 33 seconds an image against Draft's 12, which is also what pushes strict hosting into a 504 before the picture comes back. Existing sites keep whatever they already chose — change it under Antradus AI → Images.
* New (Pro): **rotating article structures.** Human Voice fixed how sentences read but never touched the skeleton, so every article still came out in the same shape. There are now three section plans — classic explainer, question-led, and ranked rundown — and the plugin cycles through them, so consecutive posts (and every article in a bulk batch) are built differently. Choose "Rotate" or lock one shape under Antradus AI → Human Voice, and override it for any single post in the editor. The status line names the shape you got.
* Changed: **the Bulk Publishing queue now tells you the truth about background processing.** The old hint promised jobs "keep running slowly in the background if you leave" — but WordPress only checks its schedule when someone loads a page, so on a local install, a staging site, or a new site with no visitors, closing the tab means nothing happens at all. The Queue tab now shows when the background runner last ran, warns when jobs are waiting and nothing is processing them, notes if the built-in scheduler is switched off, and gives you the exact command to hand your host for hands-off overnight batches.

= 2.2.0 =
* Fixed: **featured images drawn for an existing post could be about completely the wrong thing.** The image was designed from the post's first heading alone — the title and the actual content were never sent. A guide called "Reporting: Words, Images, Tokens & Cost" whose first heading was "Where it lives" produced a photo of a fox outside its den, every time. The image is now designed from the title plus the opening of the post, so it matches what you actually wrote. Affects both editors.
* Changed: the **Classic Editor** setting now also covers documentation pages, not just Posts.
* Removed: the `[antradus_docs]` shortcode no longer publishes the guides on your own website. It put an identical copy of our documentation on every customer site, which search engines treat as duplicate content — that hurts your site's rankings as well as ours. **Nothing you wrote is affected**, and the Docs screen in your dashboard (Antradus AI → Docs) is unchanged: every guide is still bundled with the plugin, still offline, still matching your installed version. The same guides are on the web at antradusai.com/docs if you want to link someone to one.

= 2.1.1 =
* New: **Image Quality & Cost setting** (Antradus AI → Image Generation). Choose Draft, Standard, Best, or let the AI decide. Each step up multiplies what your provider charges per image and how long it takes to draw — measured on gpt-image models at 1024x1024: Draft about 12 seconds, Standard about 18, unrestricted about 33-42. Nothing changes until you pick a tier: the default stays "Let the AI decide", exactly how images were generated before.
* Note: the quality dial applies to **OpenAI** only — it is the one provider that has one (gpt-image models use Draft/Standard/Best; DALL-E 3 maps to its own standard/HD; DALL-E 2 has no quality option). Because of that it is switched off unless OpenAI is your active provider. On Google Gemini (Imagen) and OpenRouter every image costs the same whatever you choose, so there you save by picking a cheaper image model instead.
* New: **Image Shape setting** — generate square (1:1), landscape (wide) or portrait (tall) images. Most themes crop featured images to a wide banner, so Landscape usually looks best; the default stays Square so nothing changes for existing sites until you choose. Honoured exactly on OpenAI and Google Gemini, requested in words on OpenRouter (some models follow it, some don't), and ignored by DALL-E 2, which only draws squares.
* Changed: **the built-in image styles no longer ask for text on the image.** All ten style presets used to request a headline, badge, ticker or caption — which image models render as unreadable gibberish letters burned into your featured image. Every preset is now purely visual, and a hard no-text rule is applied at generation time, so images come out clean whatever your presets say.
* Changed: the old text-heavy presets are cleaned up for you on update, so the settings screen shows the new visual-only prompts instead of the old ones. **Any preset you edited yourself is left exactly as you wrote it** — only prompts still identical to the ones the plugin shipped are replaced.
* Fixed: **the "504 Gateway Time-out" error now tells you what to do about it.** Instead of a wall of raw server HTML, you get a plain explanation — your web server stopped waiting, the AI didn't fail — plus the tip to check your Media Library first (the image has usually been created anyway), and a one-click link straight to the Image Quality setting that prevents it. If you're not on OpenAI it points you to the image model instead, since the quality dial wouldn't help you. Album runs no longer blame "a busy model" when the real cause was your host's timeout.

= 2.1.0 =
* New (Pro): **Human Voice** — the AI now writes the way people write instead of the way models write. Sentence lengths vary instead of marching in step, articles open on something specific and stop when the point is made (no more "In conclusion" paragraph), vague claims are replaced with concrete numbers and names, and around 60 giveaway phrases — delve, in today's fast-paced, moreover, furthermore, it's worth noting, game-changer, seamless — are banned outright. The phrase list is yours to edit, and it applies to single articles, bulk publishing and WooCommerce product descriptions alike. On by default at "Natural" strength; there's also "Strong" and "Off" in Antradus AI → Human Voice.
* New (Pro): **Write Like You** — paste 2–5 of your own published posts (or load your recent ones with one click) and the AI extracts a profile of how you write: sentence rhythm, vocabulary, how you address the reader, how strong your opinions are, how you open and close. That profile then goes into everything it writes. The profile is a plain text box you can edit.
* New (Pro): **Humanize** — one click rewrites a whole post so it stops sounding like AI, keeping every fact, number, link, image, heading and section in place. For a single paragraph, highlight it and pick 🧍 Humanize from the AI ✨ menu (works in both editors, on posts of any length).
* New (Pro): **Human Check** — an instant score out of 100 with the exact tells found in your post: uniform sentence rhythm, identical paragraph sizes, hedging, passive voice, em dash overload, formulaic connectors, "Conclusion" headings, and every banned phrase with its count. It reads the post directly, so it makes no AI request and costs nothing. On non-Latin-script posts it says so and checks only the language-independent signals.
* Fixed: **A source URL the plugin couldn't really read no longer produces a confident article anyway.** Three things went wrong together and all three are fixed. (1) A link with an #anchor — e.g. a docs or FAQ hub pointing at one section — was fetched as the WHOLE page, so you got the site's table of contents instead of the section you meant; the anchor is now honoured and the plugin reads only that section. (2) Long pages were silently cut to a fraction of their text with no warning; trimming still happens, but you are now told exactly how many words were skipped. (3) When the fetched page turns out to be a menu, an index or category page, a paywall, a bot check, a JavaScript shell, or simply not about your topic, the plugin now refuses and says what it actually found — instead of quietly writing the article from the AI's own memory. Whatever the plugin could not read, it now tells you on screen.
* Fixed: Page text extraction used a method that could silently discard most of a page's content on complex markup (a Wikipedia article came out as 213 characters instead of 104,000). Extraction now reads the page structure properly, so long reference articles are read in full and normal articles are no longer mistaken for link menus.
* Changed (Pro): **Bulk Publishing no longer generates featured images unless you ask for it.** The "Generate a featured image for each post" box is now unticked by default — a 100-keyword batch used to mean 100 extra paid image requests and a much slower queue before anyone noticed. Tick it whenever you do want images and a note explains the cost; existing queued batches keep whatever they were created with.
* Note: the AI is never instructed to invent personal stories, statistics, or customer quotes in order to sound human — that would publish false claims under your name. The most human thing in any post is still a real detail only you know, so give the draft a read before publishing.

= 2.0.4 =
* Improved: Live web search now insists on TODAY'S products, not remembered ones. The AI must first search for what is genuinely current — the newest model, version, generation, price, or ranking for any subject (tech, phones, cars, laws, sports, anything) — and build the article around what the search returns, mentioning what it remembered only as background. Previously an article could present a superseded product as "the latest" because the AI trusted its training memory.
* Improved: On OpenAI, web search is now mandatory when the option is ticked (the model can no longer skip searching), and each search retrieves more context for better grounding.

= 2.0.3 =
* Fixed: The whole-post AI assistant ("Tell Antradus AI what to do") turned images into text links when editing a post — its formatting rules never allowed image tags. It now preserves all existing media exactly: images keep their <img> tags and attributes, figures/captions, galleries, embeds, and shortcodes all survive edits (unless you explicitly ask to remove them).
* Fixed: The assistant silently cut off posts longer than ~8,000 characters — the end of a long post could vanish after an edit. It now handles the full post up to ~2,000 words and shows a clear message (pointing to the highlight-selection AI tools) for longer posts instead of losing content.
* Fixed: Running the assistant on a post containing only images or shortcodes no longer treats it as empty (which discarded the media and wrote new text from scratch).

= 2.0.2 =
* Fixed: Bulk Publishing jobs could get stuck on "writing" forever if the server was interrupted mid-job (timeout or restart). Interrupted jobs now recover automatically — they are re-queued and finished on the next run, and the background runner no longer stops while a job is still pending.
* Fixed: With live web search enabled, articles could contain raw citation code like "([site.com](https://…utm_source=openai))". Citations are now cleaned automatically: stray markdown links become normal links, bare source stubs are removed, and AI tracking parameters are stripped from URLs — in bulk publishing, single-article generation, and the post assistant.
* Improved: Comparison articles must now cover EVERY product or model named in the topic — the AI can no longer write a "X vs Y vs Z" piece that only talks about one of them, and it must say so explicitly when one of them lacks the capability being compared.
* Improved: The AI now always knows today's date, so articles are written from the present instead of being framed in an earlier year — with live web search it also researches each named subject separately.
* Improved: Bulk titles are now honest end-to-end. A per-line exact title (keyword | category | title) is passed to the writer as a requirement — the article must deliver everything the title promises, and the SEO keyphrase is derived from it. The topic suggester may only name specific products in a title when they genuinely offer the capability being compared.

= 2.0.1 =
* Changed: Streamlined the plugin's display name.

= 2.0.0 =
* New: **Antradus AI Lite and Antradus AI Pro are now one plugin.** The free version (this listing) includes article generation, SEO meta with Copy buttons, the in-editor AI assistant, featured image generation with style presets, FAQ generation, and the built-in docs — for all 5 providers, in both editors.
* New: **Antradus AI Pro** unlocks bulk publishing, YouTube to Article, the WooCommerce product generator, image albums, live web search, merge-2-sources, automatic Yoast/Rank Math fill, meta from existing articles, the free-form post assistant, and the Reporting page — [see plans](https://antradusai.com/).
* New: Licensing, secure checkout, and automatic updates powered by Freemius; upgrading to Pro takes one click from inside WordPress, and your settings carry over unchanged.
* Changed: The plugin's display name is now simply **Antradus AI** (the "Autopilot" name is retired).
* Note for existing Lite users: everything you used keeps working — your API keys, prompts, presets, and topics are preserved.

= 1.3.2 =
* Fixed: **Write from Product Photo** — on a brand-new product the AI couldn't see the product image until the post was saved. It now reads the photo the moment you pick it — no need to save first.
* Fixed: Bulk Publishing topic suggester — with "Allow NEW categories" ticked, topics could be forced into unrelated existing categories. The AI now uses an existing category only when its name genuinely fits the topic, and invents a fitting new one otherwise.
* Improved: The Antradus AI panel is now always the first panel directly below the editor, even if the boxes were dragged into a different order before.
* Improved: The "Generate SEO with Antradus AI" button now shows its progress right next to the button and reminds you to click Save Draft / Publish / Update once the SEO fields are filled (both editors).

= 1.3.1 =
* Fixed: YouTube to Article — long transcripts were cut off around the 12-minute mark; the full transcript is now used, however long the video.
* Improved: Clearer setup for the **Antradus Auto Pilot YT extension** — the setup box now tells you when the extension is installed but not yet enabled on this site, and no longer implies the "re-check" button can enable it for you.

= 1.3.0 =
* New: **Antradus Auto Pilot YT extension** — a companion browser extension that reads a YouTube video's transcript in your own browser and hands it to the plugin. This is far more reliable than reading transcripts server-side, which YouTube frequently blocks.
* New: A "What the AI does with the transcript" setting — customize the instructions the AI follows when writing from a YouTube video.
* Changed: The optional YouTube Data API key setting has been removed — the browser extension replaces it and needs no key.
* New: **Built-in documentation** — a Docs page inside the plugin (Antradus AI → Docs) with every guide, plus an `[antradus_docs]` shortcode to publish the same guides on your own website.

= 1.2.0 =
* Rebranded the premium edition to Antradus AI Autopilot (name retired again in 2.0.0).
* New: License management powered by Freemius — activate your license, receive automatic updates, and manage your account right from the WordPress dashboard.
* Changed: uninstall cleanup now runs through the licensing SDK's uninstall hook (same cleanup, Freemius-compliant packaging).
* Tested up to WordPress 7.1.
* Documented the WooCommerce product generator (build a product from a photo with AI vision).

= 1.1.0 =
* New: Reporting page — see words generated, images created, tokens used, and an estimated cost per post; model prices are pre-filled and fully editable, and all data stays in your own database.
* New: Live web search — an optional "Search the web" checkbox for articles about news and recent events, supported on OpenAI (search-capable models), Anthropic, Gemini, and OpenRouter (any model).
* New: DeepSeek provider — use deepseek-chat or deepseek-reasoner for article generation (text only).
* New: Bulk Publishing for Agencies — create dozens of posts at once from a keyword list or CSV import, with AI topic suggestions, an AI categorizer, drip scheduling, retries, and batch reports.
* New: YouTube to Article, Merge 2 Sources, Yoast SEO & Rank Math auto-fill, Generate Meta from Existing Article, Album generation, and the in-editor AI assistant.

= 1.0.1 =
* Fixed styling issues.
