=== Captionwright – AI Video Captions, Subtitles & Transcripts === Contributors: karelialabs Tags: captions, subtitles, transcript, accessibility, wcag Requires at least: 6.5 Tested up to: 7.1 Requires PHP: 7.4 Stable tag: 1.0.2 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Free AI video captions, subtitles and clickable transcripts for WordPress. Whisper runs in your browser – no API key, no per-minute fees. == Description == **Automatic captions for your WordPress videos – free, private and without per-minute fees.** Captions are required for pre-recorded video under WCAG 2.1 (success criterion 1.2.2) – the standard behind the US ADA Title II rule for state and local governments, the European Accessibility Act and the EU Web Accessibility Directive for public bodies. Writing captions by hand is slow, and captioning services charge per minute – often $0.25 a minute for AI captions and $1.99 a minute for human captions. Captionwright writes them for you, right inside WordPress: 1. Go to **Media → Captions** and click **Generate** next to a video or audio file. 2. OpenAI's Whisper speech model listens to the file **inside your browser tab** (WebGPU when your computer has a graphics card, WebAssembly otherwise). 3. Check and edit the text next to a live preview, then save. Your videos immediately show the captions in the core Video block and in `[video]` shortcodes – no theme changes needed. A clickable transcript below the video lets visitors – and search engines – read every word. = Who it is for = * **Schools, universities and public bodies** that must caption their recorded video * **Course creators and membership sites** that want captions and searchable transcripts * **Podcasters** who want a transcript under every episode * **Agencies** that need to make client sites accessible without a per-minute bill * **Churches, clubs and nonprofits** that publish recordings of talks and meetings = Features = * Automatic captions in 30 languages, or an English translation of any of them * Runs locally in the browser: no uploads, no account, no API key, no usage fees * Edit captions next to a live preview before saving * Captions are added automatically to the core Video block and the `[video]` shortcode * **Transcript block** with clickable times that jump the player, and the current sentence highlighted while it plays * Optional transcript below every captioned video, which also helps search engines and AI assistants read your videos * `[captionwright_transcript id="123"]` shortcode for classic editors and page builders * Standard WebVTT subtitle files you can download and reuse anywhere * Four model sizes, from Tiny (38 MB) to Large v3 Turbo (best accuracy, needs a graphics card) = Captionwright Pro = For larger sites, [Captionwright Pro](https://karelialabs.gumroad.com/l/captionwright-pro) adds: * **Caption the whole Media Library** with one click – pause and resume any time * **Translate captions into 30 languages** with timings kept in sync * **Interactive transcripts for YouTube and Vimeo** embeds * **Cloud mode** with your own Groq or OpenAI key for large libraries Everything in the free plugin stays free, with no limits on the number of videos or minutes. = Privacy = Speech recognition happens on the computer of the person who clicks Generate. The audio is decoded in the browser and is never sent to any server. Captions are saved as WebVTT files in your own uploads folder. == External services == This plugin downloads the Whisper speech-recognition model files from **Hugging Face** (huggingface.co) the first time you generate captions in a browser, and from the browser cache afterwards. * What is sent: ordinary HTTP requests for the public model files (for example `onnx-community/whisper-base`), which include your IP address and browser user agent as with any web request. No audio, text or site data is sent. * When: only after an administrator turns on "Allow model download" under Media → Captions → Settings, and only when someone clicks Generate. * Hugging Face terms of service: https://huggingface.co/terms-of-service * Hugging Face privacy policy: https://huggingface.co/privacy == Third-party libraries == * Transformers.js 4.3.1 by Hugging Face – Apache License 2.0 – https://github.com/huggingface/transformers.js * ONNX Runtime Web 1.31.0-dev.20260914-8d85527a0 by Microsoft – MIT License – https://github.com/microsoft/onnxruntime * Whisper model weights by OpenAI (ONNX conversions by the onnx-community organisation) – MIT License – https://github.com/openai/whisper The library files ship unmodified in `vendor/transformers/` together with their licence texts. They are copied byte for byte from the published npm packages: * `transformers.min.js` – `dist/transformers.min.js` from `@huggingface/transformers` 4.3.1. Source code: https://github.com/huggingface/transformers.js/tree/4.3.1 * `ort-wasm-simd-threaded.asyncify.mjs` and `ort-wasm-simd-threaded.asyncify.wasm` – from `dist/` in `onnxruntime-web` 1.31.0-dev.20260914-8d85527a0. Source code: https://github.com/microsoft/onnxruntime/tree/8d85527a010e294a26b274749f74294b2a32cec5 The `.wasm` file is ONNX Runtime compiled to WebAssembly. It is the engine that runs the Whisper model in the browser, on the graphics card (WebGPU) as well as on the processor, so captions cannot be generated without it. Only this one runtime file is included, not the other ONNX Runtime variants. == Frequently Asked Questions == = Which browsers work? = Tested in current Chrome, Edge and Firefox, with a graphics card (WebGPU) and on the processor alone (WebAssembly). The graphics card is several times faster; if it causes errors, Captionwright switches to the processor automatically, and you can choose "Use the processor only" in the settings. Safari 17 or later has all the browser features Captionwright needs, but we have not tested it on a Mac yet. Only the person creating captions needs one of these browsers – visitors see the captions in any browser. = How long does it take? = With a graphics card (WebGPU) and the Base model, speech is processed roughly ten times faster than real time – in our tests a 90-second video took 8 seconds. Without a graphics card it runs on the processor and is noticeably slower; choose Tiny or Base there. The model (73–199 MB for Base) is downloaded only once per browser. = How accurate is it? = Whisper is one of the most accurate open speech models, but no automatic captions are perfect. Always read through the text in the editor before saving, especially names and technical terms. For accessibility compliance, captions must be accurate. = Where are the caption files stored? = In `wp-content/uploads/captionwright/`, one `.vtt` file per file and language. = What happens to my captions if I delete the plugin? = Deactivating or updating keeps everything. Deleting Captionwright removes its settings, the caption files in `wp-content/uploads/captionwright/` and the caption records on your media. Your videos are never touched. To keep the captions, download the .vtt files or copy that folder first. = My media is on a CDN or cloud storage = The browser must be able to download the file. If it lives on another domain, that domain must allow cross-origin requests from your site. == Screenshots == 1. Media → Captions: every video and audio file with its caption languages. 2. Check and edit the captions next to a live preview before you save. 3. The captions in the core Video block, with the interactive Transcript block below it. == Changelog == = 1.0.2 = * Caption files keep the shared `wp-content/uploads/captionwright/` folder, also when Captionwright Pro is installed later. Uninstall also removes the folder Pro 1.0.0–1.0.1 used by mistake. = 1.0.1 = * Version kept in step with Captionwright Pro. No changes to the free features. = 1.0.0 = * First stable release. Automatic fallback from the graphics card to the processor, a "Use the processor only" setting, audio decoding that also works when the browser cannot decode at 16 kHz. = 0.2.0 = * Add-on hooks (engines, track actions, settings sections) and paging in the media list. * Captions are split at sentence boundaries and wrapped at commas. * Transcript block: works with YouTube and Vimeo players when they have captions. = 0.1.0 = * First release: browser-based Whisper captions, caption editor with live preview, Video block and shortcode integration, Transcript block and shortcode.