Caption Always-On Forcer
Free to download on every platform. Comes pre-installed on BotFone, BotPad and BotFlip — with extra free apps included.
About this app
WHAT IT DOES
This script automatically scans for video and audio players—HTML5, YouTube, Vimeo, and other embedded players—and enables closed captions or subtitles. It detects caption tracks and sets them to "showing" mode, clicks the CC button when available, and configures language preference. A counter badge shows how many players had captions enabled, and per-site memory prevents re-enabling on repeat visits. Enjoy every video with captions automatically turned on—perfect for accessibility, language learning, or noisy environments.
WHERE IT RUNS
The script works on any page with video or audio content—YouTube, Vimeo, news sites, streaming platforms, educational videos, and any website with embedded media. It detects HTML5 video/audio elements, YouTube and Vimeo embeds, and other embedded players. The script handles both static and dynamically loaded players.
HOW TO USE
After installation, the script automatically enables captions based on your settings. A badge appears showing the count of players with captions enabled. Click the badge to open the panel. Customize: enable or disable caption forcing, choose preferred language (e.g., en, es, fr), set force delay (ms), set max attempts, enable forcing on page load or on scroll (with configurable threshold), enable per-site memory, show/hide the count badge, choose badge position, toggle debug mode, and select which player types to force (HTML5 video/audio, embedded players). Click "Scan & Force Now" to manually trigger a scan.
TECHNICAL MECHANISM
The script uses a multi-stage caption detection and forcing pipeline. First, it scans the DOM for HTML5 video/audio elements and embedded players using comprehensive selectors. Second, for HTML5 media, it iterates through `textTracks` and sets the track mode to "showing" when the language matches the preferred language or the track kind is "subtitles" or "captions". If no tracks are found, it searches for and clicks the CC button using selectors (.captions-button, .cc-button, .ytp-subtitles-button). Third, for YouTube embeds, it modifies the iframe src to include `&cc_load_policy=1` and `&hl=language`. For Vimeo embeds, it adds `&texttrack=language`. Fourth, it attempts postMessage communication with iframe players for YouTube and Vimeo. Fifth, it stores forced URLs in per-site storage using GM_setValue. The script uses a MutationObserver for dynamically added players.
THE PANEL
The settings panel is fully draggable and can be positioned anywhere on your screen. It automatically snaps to the nearest edge when released, keeping your workspace organized. The panel can be collapsed to a small bubble showing only a gear icon, and restored with a single click. Its position is remembered across page reloads using GM_setValue. The panel also responds to the Escape key, which instantly hides it until you click the bubble again. All settings are saved immediately when changed and persist across browser sessions.
PLEASE NOTE
This script requires the free BotGentz extension to run. Enabling captions on embedded players may require reloading the iframe, which could reset playback position. The script does not access, store, or transmit any personal data or browsing history. All processing happens locally in your browser and never leaves your device.