Directory / plugin

ListenUp

v1.6.0 · by Adam Greenwell

Add "read this to me" functionality to your WordPress posts using Murf.ai text-to-speech technology.

About this plugin

ListenUp is a powerful WordPress plugin that adds text-to-speech functionality to your posts and pages. With just a few clicks, you can generate high-quality audio versions of your content using Murf.ai’s advanced AI voices.

Key Features

  • Easy Audio Generation: Generate audio for any post or page with a simple click
  • Murf.ai Integration: Uses professional AI voices for natural-sounding audio
  • Gen2 API Controls: Tune reusable Murf audio with locale, format, response mode, duration, timing metadata, speed, pitch and pauses
  • No FFmpeg Required: Ideal for hosting environments where FFmpeg is not available or restricted
  • Smart Caching: Audio files are cached locally to save API credits
  • Hands-Off Generation: Queue audio automatically when content is published and backfill recent posts on a schedule
  • Intelligent Chunking: Long content is automatically broken into manageable chunks
  • Seamless Playback: Multiple audio chunks play continuously without interruption
  • Leech Protection: Secure audio delivery prevents unauthorized direct file access and hotlinking
  • Download Control: Restrict downloads to logged-in users or disable downloads entirely
  • Flexible Placement: Choose where to display the audio player (before/after content)
  • Shortcode Support: Use [listenup] shortcode to place players anywhere
  • Accessibility First: WCAG-compliant audio player with keyboard navigation
  • Mobile Responsive: Works perfectly on all devices
  • Admin-Friendly: Simple settings page with clear instructions
  • A Voice for Each Language: Read each post in the voice, and with the pronunciation rules, chosen for its language
  • Translation (Optional): Draft a translation of a post for a person to review and approve, then read it aloud in its own language. Off until you turn it on, and nothing is translated unless someone asks

How It Works

  1. Setup: Enter your Murf.ai API key in the plugin settings
  2. Generate: Use the meta box on any post/page, or enable background generation on publish
  3. Display: Audio players appear automatically or via shortcode
  4. Listen: Visitors can play, pause, and download audio content

Advanced Features

Content Chunking: For posts that exceed Murf.ai’s API limits, content is automatically broken into smaller chunks. Each chunk generates a separate audio file, but the frontend player seamlessly plays all chunks in sequence without interruption.

Audio Concatenation: When downloading audio content that has been chunked, the plugin automatically concatenates supported stream-friendly formats into a single file, so listeners do not have to manage separate chunks.

Bulk Cloud Migration: Upload existing local-only audio files to configured cloud storage from the Audio Library without regenerating audio. Large backlogs run in small browser-safe batches, track remaining work by post, and upload the canonical playable audio file instead of internal chunk files.

Murf Gen2 Controls: Choose URL or direct base64 responses, set single-file target durations, request word timing metadata, tune speed/pitch/variation, and use [pause 1s] tags in content or pre-roll scripts. ListenUp still caches generated files locally so audio is reused instead of regenerated on every play.

No FFmpeg Dependency: Unlike many audio plugins, ListenUp doesn’t require FFmpeg, making it perfect for shared hosting environments, managed WordPress hosts, or any situation where FFmpeg is not available or restricted.

Leech Protection: Audio files are served through a secure PHP proxy with cache-safe per-file tokens, preventing unauthorized direct access and hotlinking without embedding expiring nonces in cached article HTML. All audio is delivered via WordPress AJAX endpoints with proper HTTP range request support for smooth seeking. This server-agnostic solution works on Apache, Nginx, IIS, and any PHP-capable server without requiring special server configuration.

Translation

ListenUp can draft a translation of a post for a person to review, and narrate the approved translation in its own language. Translation is off until an administrator turns it on, on the Translation tab of ListenUp’s settings.

  • Only when someone asks: A translation starts from the Translations box in the post editor, from WP-CLI, or through an ability once its cost is confirmed. Nothing is translated on publish, on save or on a schedule, and nothing translates the whole archive.
  • Drafts for review: Each translation is saved as a new draft linked to its source, and the source post is never changed. A translation can’t be published, scheduled or voiced until a person approves it.
  • Your choice of engine: The WordPress AI client, which uses the AI provider connected to your site (WordPress 7.0 and later), or Murf.ai’s translation API. No engine runs without a monthly budget, and the Murf.ai engine keeps a reserve of your Murf.ai balance for audio. Other plugins can add engines.
  • Glossaries and checks: A glossary for each language fixes how terms are translated and which are kept as written. Every translation is checked for broken markup, changed numbers and units, glossary terms, formality, length and untranslated text.
  • Out-of-date flags: A translation whose source changed after it was translated is flagged in the editor, on post lists and in WP-CLI.
  • Background jobs: Long translations run in the background through Action Scheduler or WP-Cron, and WP-CLI finishes them where WP-Cron is disabled.
  • Narration in each language: Choose a voice for each language, keep pronunciation rules by language, and play the site’s pre-roll only before audio in the site’s language.
  • Engine bake-off: wp listenup translate compare and wp listenup translate score compare engines blind on your own articles, so you can choose one on evidence.
  • Abilities: listenup/translate-post and listenup/translation-status let AI and MCP clients ask for and follow translations with the same permissions and budgets as the editor. They are not exposed to REST or MCP unless your site opts in.
  • Analytics by language: Player events say which language the post and its audio are in, which voice read it, and whether the post is a translation.

Perfect For

  • Bloggers who want to offer audio versions of their posts
  • Content creators looking to improve accessibility
  • Websites targeting mobile users who prefer audio content
  • Educational sites with long-form content
  • News sites wanting to offer audio news

Accessibility Features

  • Full keyboard navigation support
  • Screen reader compatible
  • High contrast mode support
  • Reduced motion support
  • Proper ARIA labels and descriptions

External Services

ListenUp connects to the services below, each only for the feature described. It never sends anything about your visitors to any of them. Translation is off until an administrator turns it on, and even then nothing is translated on publish, on save or on a schedule: a post is sent for translation only when someone asks for it.

Murf.ai text-to-speech
ListenUp uses Murf.ai’s text-to-speech API to create audio versions of your posts and pages.

  • Endpoint: https://api.murf.ai/v1/speech/generate
  • Data Sent: Your Murf.ai API key; the text of the post or page; the voice ID, locale and style chosen for the post’s language; the speech generation settings (format, sample rate, channels, speed, pitch, variation, response mode, optional target duration and optional word timing request); and the pronunciation rules for the post’s language, if you have set any. A voice or pronunciation preview sends a short sample sentence, and pre-roll generation sends your pre-roll script.
  • When Sent: Only when audio is asked for: from the post editor, with wp listenup generate, or from a preview or pre-roll generation on the settings screen; and, once an administrator turns them on in the Automation settings (both are off by default), when a post is published or by the recurring backfill. In URL response mode, ListenUp then downloads the finished audio from the address Murf.ai returns.
  • Cost: Uses characters from your Murf.ai plan.
  • Terms of Service: https://murf.ai/terms-of-service
  • Privacy Policy: https://murf.ai/privacy-policy

Murf.ai voice list
ListenUp reads Murf.ai’s list of voices, with the languages and styles each one offers, to show the voice pickers and to pick a style a voice offers.

  • Endpoint: https://api.murf.ai/v1/speech/voices?model=GEN2
  • Data Sent: Your Murf.ai API key only. No content is sent.
  • When Sent: When an administrator tests the API connection, and when the list is needed and not already kept: on ListenUp’s settings screen, and when audio is created or previewed in a voice other than the site’s default voice. Once fetched, the list is kept for a day, or until the API key changes.
  • Cost: Free; it uses no characters.
  • Terms of Service: https://murf.ai/terms-of-service
  • Privacy Policy: https://murf.ai/privacy-policy

Murf.ai translation
The optional Murf.ai translation engine translates posts with Murf.ai’s translation API.

  • Endpoint: https://api.murf.ai/v1/text/translate
  • Data Sent: Your Murf.ai API key (the audio key, or a separate translation key set on the Translation tab or with the LISTENUP_MURF_TRANSLATION_API_KEY constant); the target language; and the text of the post’s title, excerpt and content, with the alt and title text in its markup, as plain text with numbered placeholders in place of the markup. No tags or other attributes are sent, so no link or image addresses, and nothing else: no glossary, style notes or context.
  • When Sent: Only after an administrator turns translation on and sets a monthly budget and an audio reserve for the Murf.ai engine, and only when a user allowed to translate the post asks for a translation: from the Translations box in the post editor; through the listenup/translate-post ability once the caller confirms the cost; or with wp listenup translate post, batch, compare (after --yes) or run, which runs translations already asked for. A translation asked for in the editor, or a long one asked for through the ability, is sent from a background job, by WP-Cron or Action Scheduler.
  • Raw-HTML probe: wp listenup translate compare --probe-raw-html also sends a few passages of each compared post to the same endpoint with their HTML markup and attributes, link addresses included, to test whether Murf.ai keeps markup. It runs only when that option is given.
  • Cost: Spends the same Murf.ai balance as audio, billed by the characters returned. Every request counts against the monthly budget and keeps the audio reserve for audio.
  • Terms of Service: https://murf.ai/terms-of-service
  • Privacy Policy: https://murf.ai/privacy-policy

AI provider, through the WordPress AI client
The optional AI translation engine translates posts with the AI provider connected to your site, through the AI client built into WordPress 7.0 and later. ListenUp includes no provider of its own and makes no request to one directly: it hands the request to the WordPress AI client, which sends it to the AI provider selected on ListenUp’s Translation tab or, when none is selected there, to the site’s default provider. Providers are added by provider plugins and connected under Settings > Connectors.

  • Data Sent: The text of the post’s title, excerpt and content, with the alt and title text in its markup, and with its inline HTML tags but none of their attributes, so no link or image addresses; the title and excerpt again as plain text, for context; the glossary terms the text uses; the language’s style notes; and the translation instructions. The provider receives it with your site’s credentials for that provider.
  • When Sent: Only after an administrator turns translation on and sets a monthly budget for the AI engine, and only when a user allowed to translate the post asks for a translation, in the same ways as for Murf.ai above.
  • Cost: Billed by the provider, under your account with it. Every request counts against the monthly budget.
  • Terms and Privacy: The selected provider’s terms of service and privacy policy apply to what it is sent, together with your account’s data settings with that provider, such as whether it keeps or trains on what it receives. Check them before choosing this engine.

Optional Cloud Storage Services
This plugin optionally supports uploading audio files to cloud storage services (Amazon S3, Google Cloud Storage, Cloudflare R2) to reduce bandwidth usage on your web server. This feature is completely optional and disabled by default. No data is sent to these services unless you explicitly configure and enable cloud storage in the plugin settings. Once it is enabled, audio files are uploaded when you move them there from the Audio Library or with wp listenup cloud-upload, when audio is created with automatic upload turned on, and when ListenUp replaces a cloud copy it finds incomplete. Your visitors’ browsers then play and download audio from the storage service.

  • Amazon S3: https://aws.amazon.com/service-terms/ (Privacy: https://aws.amazon.com/privacy/)
  • Google Cloud Storage: https://cloud.google.com/terms/ (Privacy: https://cloud.google.com/terms/cloud-privacy-notice)
  • Cloudflare R2: https://www.cloudflare.com/terms/ (Privacy: https://www.cloudflare.com/privacypolicy/)

Support

For support, please visit the plugin’s support forum or contact the developer.

Privacy Policy

ListenUp stores nothing about your site’s visitors and sets no cookies. It sends your content to other services only as described under External Services: to Murf.ai when audio is created, to your cloud storage service if you use one, and to the translation engine you choose when someone asks for a translation. It never sends anything about your visitors.

  • Audio playback: Audio plays from your site, or from your cloud storage service if you use one, which then receives the IP address and browser details of each visitor who plays or downloads audio from it, as with any download. The audio library remembers a visitor’s autoplay choice in their browser’s local storage, and never sends it to your site.
  • Analytics: If you turn on analytics tracking (off by default), the player adds play, progress and download events to the page’s dataLayer. They carry facts about the content only: the post, its audio, their languages, the voice, and whether the post is a translation and of which post. ListenUp sends them nowhere; your tag manager or analytics service decides what happens to them.
  • Translation: Off until an administrator turns it on. ListenUp records who asked for each translation and who approved it, and when, and it counts the translations each user started in the last hour, to limit them.
  • Abilities: The listenup/translate-post and listenup/translation-status abilities act for a signed-in user who may translate the post. They are not available through the REST API or the MCP Adapter unless your site opts in with the listenup_translation_ability_public filter, and translate-post sends nothing until the caller confirms the cost.
  • Suggested policy text: ListenUp suggests text for your privacy policy under Settings > Privacy > Policy Guide.

Deleting ListenUp removes everything it stores and keeps translated posts as ordinary posts; see “What happens to my data when I delete ListenUp?” above.

Plugin tags