{"id":335800,"date":"2026-07-13T13:02:48","date_gmt":"2026-07-13T13:02:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sahajanand-post-to-speech\/"},"modified":"2026-07-13T16:22:23","modified_gmt":"2026-07-13T16:22:23","slug":"sahajanand-post-to-speech","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sahajanand-post-to-speech\/","author":16968317,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Sahajanand Post to Speech","header_author":"Ronak Vanpariya","header_description":"Convert post content or custom text to speech with Sahajanand Post to Speech and embed an audio player using a Gutenberg block.","assets_banners_color":"d9d9d9","last_updated":"2026-07-13 16:22:23","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/vanpariyar.github.io","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/sahajanand-post-to-speech\/","header_author_uri":"https:\/\/vanpariyar.github.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"vanpariyar","date":"2026-07-13 13:02:11"},"1.0.1":{"tag":"1.0.1","author":"vanpariyar","date":"2026-07-13 16:22:23"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3606366,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3606366,"resolution":"256x256","location":"assets","locale":"","width":264,"height":257}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3606366,"resolution":"772x250","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3606484,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/post.php?post=1&action=edit\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Sahajanand Post to Speech Demo\",\"sahajanand_post_to_speech_generation_mode\":\"browser\"}},{\"step\":\"runPHP\",\"code\":\"<?php require_once 'wordpress\\\/wp-load.php'; $content = '<!-- wp:paragraph --><p>Welcome to the <strong>Sahajanand Post to Speech<\\\/strong> demo. Add or edit the block below, choose a voice in the sidebar, and click <strong>Generate audio<\\\/strong>. Browser mode downloads speech models on first use (networking is enabled in this preview).<\\\/p><!-- \\\/wp:paragraph --><!-- wp:sahajanand-post-to-speech\\\/post-audio {\\\"textSource\\\":\\\"custom\\\",\\\"text\\\":\\\"Hello from Sahajanand Post to Speech! This WordPress Playground demo converts text to speech in your browser using ONNX Runtime Web and bundled eSpeak-NG.\\\"} \\\/-->'; wp_update_post( array( 'ID' => 1, 'post_title' => 'Sahajanand Post to Speech Demo', 'post_content' => $content, 'post_status' => 'draft' ) ); ?>\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"sahajanand-post-to-speech\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":{"sahajanand-post-to-speech\/post-audio":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"sahajanand-post-to-speech\/post-audio","version":"1.0.1","title":"Sahajanand Post To Speech","category":"media","icon":"controls-volumeon","description":"Convert post content or custom text to speech with Sahajanand Post to Speech and embed an audio player.","keywords":["audio","text-to-speech","gutenberg","speech","blog","sahajanand"],"textdomain":"sahajanand-post-to-speech","attributes":{"textSource":{"type":"string","default":"post"},"text":{"type":"string","default":""},"audioUrl":{"type":"string","default":""},"attachmentId":{"type":"number"},"voice":{"type":"string","default":"Bella"},"speed":{"type":"number","default":1}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css"}},"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3606366,"resolution":"1","location":"assets","locale":"","width":1641,"height":843},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3606366,"resolution":"2","location":"assets","locale":"","width":1441,"height":550},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3606366,"resolution":"3","location":"assets","locale":"","width":1172,"height":770},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3606366,"resolution":"4","location":"assets","locale":"","width":1460,"height":678}},"screenshots":{"1":"Sahajanand Post To Speech block in the editor with post content preview","2":"Block settings \u2014 browser and API mode options","3":"Plugin Settings page Preview","4":"Block settings \u2014 Custom Post Content preview"}},"plugin_section":[],"plugin_tags":[452,323,148076,1448,16722],"plugin_category":[50],"plugin_contributors":[181423],"plugin_business_model":[],"class_list":["post-335800","plugin","type-plugin","status-publish","hentry","plugin_tags-audio","plugin_tags-blog","plugin_tags-gutenberg","plugin_tags-speech","plugin_tags-text-to-speech","plugin_category-media","plugin_contributors-vanpariyar","plugin_committers-vanpariyar"],"banners":{"banner":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/banner-772x250.png?rev=3606366","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/icon-128x128.png?rev=3606366","icon_2x":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/icon-256x256.png?rev=3606366","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/screenshot-1.png?rev=3606366","caption":"Sahajanand Post To Speech block in the editor with post content preview"},{"src":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/screenshot-2.png?rev=3606366","caption":"Block settings \u2014 browser and API mode options"},{"src":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/screenshot-3.png?rev=3606366","caption":"Plugin Settings page Preview"},{"src":"https:\/\/ps.w.org\/sahajanand-post-to-speech\/assets\/screenshot-4.png?rev=3606366","caption":"Block settings \u2014 Custom Post Content preview"}],"raw_content":"<!--section=description-->\n<p>Sahajanand Post to Speech helps you convert WordPress posts into listenable audio. Add the <strong>Sahajanand Post To Speech<\/strong> block, generate speech from your post content, and visitors get a simple audio player \u2014 no post text is shown on the frontend.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Gutenberg block for post-to-audio conversion<\/li>\n<li><strong>Post content<\/strong> or <strong>custom text<\/strong> as the audio source<\/li>\n<li>Frontend shows only the audio player (no duplicated post text)<\/li>\n<li>Browser (WASM) or external API generation modes<\/li>\n<li>8 built-in voices with adjustable speed<\/li>\n<li>Generated audio saved to the WordPress media library<\/li>\n<\/ul>\n\n<p><strong>Generation modes<\/strong><\/p>\n\n<ul>\n<li><strong>Browser (WASM)<\/strong> \u2014 runs in the block editor using ONNX Runtime Web. No server-side TTS engine required. Speech models are downloaded on first use.<\/li>\n<li><strong>API<\/strong> \u2014 proxies requests to a compatible HTTP TTS API you host. Useful for long posts or low-powered devices. Your API key stays on the server.<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>This plugin uses the open-source <a href=\"https:\/\/github.com\/KittenML\/KittenTTS\">KittenTTS<\/a> speech synthesis models from <a href=\"https:\/\/github.com\/KittenML\">KittenML<\/a> and bundles <a href=\"https:\/\/github.com\/espeak-ng\/espeak-ng\">eSpeak-NG<\/a> (GPL-3.0-or-later) for browser phonemization.<\/p>\n\n<p>Sahajanand Post to Speech is developed independently and is <strong>not affiliated with, endorsed by, or sponsored by KittenML<\/strong>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin may contact the following third-party services when generating audio:<\/p>\n\n<p><strong>Browser mode (editor only)<\/strong><\/p>\n\n<ul>\n<li><a href=\"https:\/\/huggingface.co\/\">Hugging Face<\/a> \u2014 downloads speech model files configured in settings (default models published by KittenML). ONNX Runtime and eSpeak-NG WASM files ship inside the plugin package.<\/li>\n<\/ul>\n\n<p><strong>API mode (server-side, when configured)<\/strong><\/p>\n\n<ul>\n<li>Your configured TTS API URL \u2014 WordPress sends post text and receives WAV audio. Only the site administrator configures this URL and API key.<\/li>\n<\/ul>\n\n<p>No data is sent to external services on the public frontend unless you use API mode during generation in the editor.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/sahajanand-post-to-speech\/<\/code> or install from the WordPress plugin directory.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Go to <strong>Settings \u2192 Sahajanand Post to Speech<\/strong> and choose <strong>Browser<\/strong> or <strong>API<\/strong> mode.<\/li>\n<li>Edit a post, add the <strong>Sahajanand Post To Speech<\/strong> block, and click <strong>Generate audio<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20convert%20an%20entire%20blog%20post%20to%20audio%3F\"><h3>Can I convert an entire blog post to audio?<\/h3><\/dt>\n<dd><p>Yes. Set <strong>Text source<\/strong> to <strong>Post content<\/strong> in the block sidebar. The block reads the full post text when you generate audio.<\/p><\/dd>\n<dt id=\"is%20post%20text%20shown%20on%20the%20frontend%3F\"><h3>Is post text shown on the frontend?<\/h3><\/dt>\n<dd><p>No. Only the audio player is displayed to visitors.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20from%20an%20older%20%E2%80%9Cpost%20to%20speech%E2%80%9D%20install%3F\"><h3>Can I migrate from an older \u201cPost to Speech\u201d install?<\/h3><\/dt>\n<dd><p>This release uses the folder slug <code>sahajanand-post-to-speech<\/code> and block namespace <code>sahajanand-post-to-speech\/post-audio<\/code>. Deactivate and remove any old plugin folder, install this version, then re-add the <strong>Sahajanand Post To Speech<\/strong> block to your posts. Plugin settings are preserved when option keys match.<\/p><\/dd>\n<dt id=\"which%20mode%20should%20i%20use%3F\"><h3>Which mode should I use?<\/h3><\/dt>\n<dd><p>Use <strong>Browser<\/strong> on modern desktops with a good internet connection for the first model download. Use <strong>API<\/strong> if you host a compatible TTS HTTP service or need server-side generation.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20an%20api%20service%3F\"><h3>Where do I get an API service?<\/h3><\/dt>\n<dd><p>API mode expects a REST API that accepts JSON and returns WAV audio. You can self-host a service using the open-source <a href=\"https:\/\/github.com\/KittenML\/KittenTTS\">KittenTTS<\/a> project.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20shared%20hosting%3F\"><h3>Does this work on shared hosting?<\/h3><\/dt>\n<dd><p>Yes. Browser mode needs no special server software. API mode only requires <code>wp_remote_post()<\/code> outbound HTTP access to your API URL.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of <strong>Sahajanand Post to Speech<\/strong>.<\/li>\n<li><strong>Sahajanand Post To Speech<\/strong> Gutenberg block \u2014 convert post content or custom text to audio.<\/li>\n<li>Browser (WASM) generation with ONNX Runtime Web and bundled eSpeak-NG.<\/li>\n<li>Optional API mode for server-side generation via a compatible TTS HTTP service.<\/li>\n<li>Eight voices, adjustable speed, and audio saved to the media library.<\/li>\n<\/ul>","raw_excerpt":"Turn blog posts into audio with the Sahajanand Post To Speech Gutenberg block.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335800","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=335800"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanpariyar"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335800"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335800"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335800"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335800"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335800"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}