{"id":390272,"date":"2026-10-25T10:24:22","date_gmt":"2026-10-25T10:24:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/captionwright-automatic-captions-transcripts\/"},"modified":"2026-10-25T10:23:47","modified_gmt":"2026-10-25T10:23:47","slug":"captionwright","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/captionwright\/","author":23589964,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Captionwright \u2013 AI Video Captions, Subtitles & Transcripts","header_author":"Karelia Labs","header_description":"Generate captions (WebVTT) and transcripts for your videos and audio with Whisper, running privately in your own browser. No API key, no per-minute fees.","assets_banners_color":"0a4919","last_updated":"2026-10-25 10:23:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":45,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"karelialabs","date":"2026-10-25 10:23:47","revision":3764312}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3764312,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3764312,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3764312,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3764312,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3764312,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"captionwright\/transcript":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"captionwright\/transcript","version":"1.0.0","title":"Transcript","category":"media","icon":"media-text","description":"Shows the transcript of a captioned video or audio file. Click a time to jump the player there.","keywords":["captions","subtitles","accessibility"],"textdomain":"captionwright","attributes":{"attachmentId":{"type":"number","default":0},"lang":{"type":"string","default":""},"collapsed":{"type":"boolean","default":true},"showTimes":{"type":"boolean","default":true}},"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true},"color":{"background":true,"text":true}},"editorScript":"file:.\/index.js","style":"captionwright-transcript","viewScript":"captionwright-transcript-view","render":"file:.\/render.php"}},"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3764312,"resolution":"1","location":"assets","locale":"","width":1280,"height":860},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3764312,"resolution":"2","location":"assets","locale":"","width":1280,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3764312,"resolution":"3","location":"assets","locale":"","width":1280,"height":860}},"screenshots":{"1":"Media \u2192 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."}},"plugin_section":[],"plugin_tags":[1953,1981,1982,15788,1956],"plugin_category":[34],"plugin_contributors":[288387],"plugin_business_model":[],"class_list":["post-390272","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-captions","plugin_tags-subtitles","plugin_tags-transcript","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-karelialabs","plugin_committers-karelialabs"],"banners":{"banner":"https:\/\/ps.w.org\/captionwright\/assets\/banner-772x250.png?rev=3764312","banner_2x":"https:\/\/ps.w.org\/captionwright\/assets\/banner-1544x500.png?rev=3764312","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/captionwright\/assets\/icon.svg?rev=3764312","icon":"https:\/\/ps.w.org\/captionwright\/assets\/icon.svg?rev=3764312","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/captionwright\/assets\/screenshot-1.png?rev=3764312","caption":"Media \u2192 Captions: every video and audio file with its caption languages."},{"src":"https:\/\/ps.w.org\/captionwright\/assets\/screenshot-2.png?rev=3764312","caption":"Check and edit the captions next to a live preview before you save."},{"src":"https:\/\/ps.w.org\/captionwright\/assets\/screenshot-3.png?rev=3764312","caption":"The captions in the core Video block, with the interactive Transcript block below it."}],"raw_content":"<!--section=description-->\n<p><strong>Automatic captions for your WordPress videos \u2013 free, private and without per-minute fees.<\/strong><\/p>\n\n<p>Captions are required for pre-recorded video under WCAG 2.1 (success criterion 1.2.2) \u2013 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 \u2013 often $0.25 a minute for AI captions and $1.99 a minute for human captions.<\/p>\n\n<p>Captionwright writes them for you, right inside WordPress:<\/p>\n\n<ol>\n<li>Go to <strong>Media \u2192 Captions<\/strong> and click <strong>Generate<\/strong> next to a video or audio file.<\/li>\n<li>OpenAI's Whisper speech model listens to the file <strong>inside your browser tab<\/strong> (WebGPU when your computer has a graphics card, WebAssembly otherwise).<\/li>\n<li>Check and edit the text next to a live preview, then save.<\/li>\n<\/ol>\n\n<p>Your videos immediately show the captions in the core Video block and in <code>[video]<\/code> shortcodes \u2013 no theme changes needed. A clickable transcript below the video lets visitors \u2013 and search engines \u2013 read every word.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<ul>\n<li><strong>Schools, universities and public bodies<\/strong> that must caption their recorded video<\/li>\n<li><strong>Course creators and membership sites<\/strong> that want captions and searchable transcripts<\/li>\n<li><strong>Podcasters<\/strong> who want a transcript under every episode<\/li>\n<li><strong>Agencies<\/strong> that need to make client sites accessible without a per-minute bill<\/li>\n<li><strong>Churches, clubs and nonprofits<\/strong> that publish recordings of talks and meetings<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Automatic captions in 30 languages, or an English translation of any of them<\/li>\n<li>Runs locally in the browser: no uploads, no account, no API key, no usage fees<\/li>\n<li>Edit captions next to a live preview before saving<\/li>\n<li>Captions are added automatically to the core Video block and the <code>[video]<\/code> shortcode<\/li>\n<li><strong>Transcript block<\/strong> with clickable times that jump the player, and the current sentence highlighted while it plays<\/li>\n<li>Optional transcript below every captioned video, which also helps search engines and AI assistants read your videos<\/li>\n<li><code>[captionwright_transcript id=\"123\"]<\/code> shortcode for classic editors and page builders<\/li>\n<li>Standard WebVTT subtitle files you can download and reuse anywhere<\/li>\n<li>Four model sizes, from Tiny (38 MB) to Large v3 Turbo (best accuracy, needs a graphics card)<\/li>\n<\/ul>\n\n<h4>Captionwright Pro<\/h4>\n\n<p>For larger sites, <a href=\"https:\/\/karelialabs.gumroad.com\/l\/captionwright-pro\">Captionwright Pro<\/a> adds:<\/p>\n\n<ul>\n<li><strong>Caption the whole Media Library<\/strong> with one click \u2013 pause and resume any time<\/li>\n<li><strong>Translate captions into 30 languages<\/strong> with timings kept in sync<\/li>\n<li><strong>Interactive transcripts for YouTube and Vimeo<\/strong> embeds<\/li>\n<li><strong>Cloud mode<\/strong> with your own Groq or OpenAI key for large libraries<\/li>\n<\/ul>\n\n<p>Everything in the free plugin stays free, with no limits on the number of videos or minutes.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>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.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin downloads the Whisper speech-recognition model files from <strong>Hugging Face<\/strong> (huggingface.co) the first time you generate captions in a browser, and from the browser cache afterwards.<\/p>\n\n<ul>\n<li>What is sent: ordinary HTTP requests for the public model files (for example <code>onnx-community\/whisper-base<\/code>), which include your IP address and browser user agent as with any web request. No audio, text or site data is sent.<\/li>\n<li>When: only after an administrator turns on \"Allow model download\" under Media \u2192 Captions \u2192 Settings, and only when someone clicks Generate.<\/li>\n<li>Hugging Face terms of service: https:\/\/huggingface.co\/terms-of-service<\/li>\n<li>Hugging Face privacy policy: https:\/\/huggingface.co\/privacy<\/li>\n<\/ul>\n\n<h3>Third-party libraries<\/h3>\n\n<ul>\n<li>Transformers.js 4.3.1 by Hugging Face \u2013 Apache License 2.0 \u2013 https:\/\/github.com\/huggingface\/transformers.js<\/li>\n<li>ONNX Runtime Web 1.31.0-dev.20260914-8d85527a0 by Microsoft \u2013 MIT License \u2013 https:\/\/github.com\/microsoft\/onnxruntime<\/li>\n<li>Whisper model weights by OpenAI (ONNX conversions by the onnx-community organisation) \u2013 MIT License \u2013 https:\/\/github.com\/openai\/whisper<\/li>\n<\/ul>\n\n<p>The library files ship unmodified in <code>vendor\/transformers\/<\/code> together with their licence texts. They are copied byte for byte from the published npm packages:<\/p>\n\n<ul>\n<li><code>transformers.min.js<\/code> \u2013 <code>dist\/transformers.min.js<\/code> from <code>@huggingface\/transformers<\/code> 4.3.1. Source code: https:\/\/github.com\/huggingface\/transformers.js\/tree\/4.3.1<\/li>\n<li><code>ort-wasm-simd-threaded.asyncify.mjs<\/code> and <code>ort-wasm-simd-threaded.asyncify.wasm<\/code> \u2013 from <code>dist\/<\/code> in <code>onnxruntime-web<\/code> 1.31.0-dev.20260914-8d85527a0. Source code: https:\/\/github.com\/microsoft\/onnxruntime\/tree\/8d85527a010e294a26b274749f74294b2a32cec5<\/li>\n<\/ul>\n\n<p>The <code>.wasm<\/code> 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.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20browsers%20work%3F\"><h3>Which browsers work?<\/h3><\/dt>\n<dd><p>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 \u2013 visitors see the captions in any browser.<\/p><\/dd>\n<dt id=\"how%20long%20does%20it%20take%3F\"><h3>How long does it take?<\/h3><\/dt>\n<dd><p>With a graphics card (WebGPU) and the Base model, speech is processed roughly ten times faster than real time \u2013 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\u2013199 MB for Base) is downloaded only once per browser.<\/p><\/dd>\n<dt id=\"how%20accurate%20is%20it%3F\"><h3>How accurate is it?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"where%20are%20the%20caption%20files%20stored%3F\"><h3>Where are the caption files stored?<\/h3><\/dt>\n<dd><p>In <code>wp-content\/uploads\/captionwright\/<\/code>, one <code>.vtt<\/code> file per file and language.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20captions%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my captions if I delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivating or updating keeps everything. Deleting Captionwright removes its settings, the caption files in <code>wp-content\/uploads\/captionwright\/<\/code> 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.<\/p><\/dd>\n<dt id=\"my%20media%20is%20on%20a%20cdn%20or%20cloud%20storage\"><h3>My media is on a CDN or cloud storage<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Caption files keep the shared <code>wp-content\/uploads\/captionwright\/<\/code> folder, also when Captionwright Pro is installed later. Uninstall also removes the folder Pro 1.0.0\u20131.0.1 used by mistake.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Version kept in step with Captionwright Pro. No changes to the free features.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Add-on hooks (engines, track actions, settings sections) and paging in the media list.<\/li>\n<li>Captions are split at sentence boundaries and wrapped at commas.<\/li>\n<li>Transcript block: works with YouTube and Vimeo players when they have captions.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: browser-based Whisper captions, caption editor with live preview, Video block and shortcode integration, Transcript block and shortcode.<\/li>\n<\/ul>","raw_excerpt":"Free AI video captions, subtitles and clickable transcripts for WordPress. Whisper runs in your browser \u2013 no API key, no per-minute fees.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=390272"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/karelialabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390272"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390272"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390272"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390272"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390272"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}