WP Manifestindependent plugin directory
manifest / ai / transcribepress

TranscribePress

by Edris Husein · github.com/husein-edris/transcribepress · website

★ 0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/husein-edris/transcribepress/archive/refs/heads/main.zip

TranscribePress

Private, on-device audio & video transcription for WordPress. Whisper AI runs in your browser (WebGPU/WASM via transformers.js) — media files never leave your machine; only the text is saved.

This plugin is the WordPress successor of a local Python/Flask + Whisper app, rebuilt so it needs no Python, no ffmpeg, and no server resources.

Why client-side?

Old server-side approach TranscribePress
Upload Full media file (25 MB limit) Nothing — file stays local
Server load Whisper on CPU, minutes per file Zero
Speed Bound by server CPU WebGPU-accelerated in the browser
Privacy File stored on server during processing File never leaves the machine
Hosting requirements Python, ffmpeg, 4 GB+ RAM Any WordPress host

Features

  • Drag & drop multiple audio files (MP3, WAV, M4A, OGG, OPUS, FLAC)
  • Video to transcript: the audio track of MP4 / WebM / MOV files is decoded in the browser via the Web Audio API
  • Four Whisper models — Tiny / Base / Small / Large v3 Turbo (best accuracy, GPU recommended)
  • Language auto-detect or manual selection (18 languages in the UI)
  • Live progress: model download %, decoding, transcription
  • Exports generated client-side: TXT · JSON · SRT · VTT
  • Per-user history in a custom table; admins can view and manage all users' items
  • Settings: default model, default language, history on/off

Architecture

transcribepress.php          Plugin bootstrap
includes/
  class-tp-install.php       Activation, dbDelta schema, upgrades
  class-tp-models.php        Model & language catalog (shared PHP/JS validation)
  class-tp-rest.php          REST API (history CRUD, settings)
  class-tp-admin.php         Admin menu, asset loading, JS config
admin/views/admin-page.php   Markup (all rendering is escaped / textContent)
assets/
  js/app.js                  UI: queue, results, history, settings
  js/transcriber.js          Web Audio decoding + worker bridge
  js/worker.js               Whisper pipeline in a module web worker
  js/exports.js              TXT/JSON/SRT/VTT builders
  vendor/transformers.min.js   Pinned transformers.js v4.2.0 (self-hosted, self-contained build)
  • Audio is decoded to 16 kHz mono Float32Array in the page, transferred (zero-copy) to a module worker that runs the Whisper pipeline with 30 s chunking and timestamps.
  • Device selection: WebGPU with q4/fp16 weights when available, otherwise WASM with q8 — with automatic fallback.
  • Models are fetched from the Hugging Face Hub on first use and cached by the browser. The ONNX runtime WASM is loaded from jsDelivr, pinned to the bundled library version. No other external requests; media and transcripts are never sent anywhere.

Security

  • Every REST route requires the edit_posts capability (filterable via transcribepress_capability) plus a valid wp_rest nonce.
  • Ownership enforced server-side: users only read/delete their own items; manage_options may pass scope=all.
  • All inputs validated and sanitized (model/language whitelists, segment shape validation, 2 MB content cap); all queries use $wpdb->prepare.
  • All output escaped (PHP) or rendered with textContent (JS) — stored transcripts cannot inject markup.
  • Uninstall removes the table and all options.

Installation

  1. Copy this folder to wp-content/plugins/transcribepress/ (or upload a zip of it).
  2. Activate TranscribePress in wp-admin → Plugins.
  3. Open the TranscribePress menu item and drop a file.

Requires WordPress 6.5+ (script modules) and PHP 7.4+.

License

GPL-2.0-or-later. Bundles transformers.js (Apache-2.0).