{"id":1673,"date":"2026-09-03T05:07:43","date_gmt":"2026-09-02T21:07:43","guid":{"rendered":"https:\/\/blog.liu-qi.cn\/2026\/09\/03\/liusheng-subtitles-browser-extension\/"},"modified":"2026-09-03T05:44:26","modified_gmt":"2026-09-02T21:44:26","slug":"liusheng-subtitles-browser-extension","status":"publish","type":"post","link":"https:\/\/en.blog.liu-qi.cn\/2026\/09\/03\/liusheng-subtitles-browser-extension\/","title":{"rendered":"Open-Source Release: A Browser Extension for Automatically Generating Subtitles for Online Videos Using Speech Recognition and Large Language Models"},"content":{"rendered":"<p>This project was actually started a few months ago.<\/p>\n<p>I&#8217;ve just completed a major update over the past couple of days, restructuring it for improved stability and fixing issues with duplicate API billing caused by message loss or restarts. Now it&#8217;s officially released.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/01-01.jpg\" alt=\"Liusheng Subtitles Browser Extension Feature Overview\" \/><\/p>\n<p>Developed by Vibe Coding, the project is open-source.<\/p>\n<p>The browser media sniffing is derived from <strong>Cat Catch<\/strong>, audio processing uses <strong>Webffmpeg<\/strong>, and subtitle processing references implementations from projects like <strong>WhisperX, Speaches, faster-whisper, stable-ts<\/strong>. Thanks to the above projects.<\/p>\n<p>The source code repository is here:<\/p>\n<p><a href=\"https:\/\/github.com\/Liu-Bot24\/liusheng-subtitles\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/Liu-Bot24\/liusheng-subtitles<\/a><\/p>\n<p>You can also install it directly from the Chrome Web Store:<\/p>\n<p><a href=\"https:\/\/chromewebstore.google.com\/detail\/ipcmkanhjahdpnacnjabkmlhggekkegm\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/chromewebstore.google.com\/detail\/ipcmkanhjahdpnacnjabkmlhggekkegm<\/a><\/p>\n<p>The functionality of this project is as the title states: <strong>Automatically generate subtitles for streaming videos that lack them.<\/strong><\/p>\n<p>A heads-up is necessary: Liusheng Subtitles supports most common web videos you encounter while browsing, but it does not support videos protected by DRM or specific platform policies, such as typical Netflix and YouTube videos. However, videos on YouTube mostly come with auto-generated subtitles, so there&#8217;s little need for ASR there. Transcribing and then translating might be less convenient than directly using plugins like Immersive Translate.<\/p>\n<p>This product takes the form of a browser extension, allowing you to <strong>initiate subtitle generation directly on the page<\/strong> where the video is playing, without needing to open a separate third-party app, which is very convenient. Simultaneously, the entire subtitle generation process is a pre-processing pipeline: it first extracts the audio, then performs recognition and translation, and finally overlays the subtitles back onto the player. Therefore, the overall <strong>latency and experience are close to native<\/strong>. Moreover, because it&#8217;s pre-processed, this solution is generally <strong>significantly cheaper than directly integrating live translation models<\/strong>.<\/p>\n<hr \/>\n<p>When you&#8217;re browsing the web and come across a foreign language video without subtitles, you can use this extension.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/02-02.jpg\" alt=\"Liusheng Subtitles generating bilingual subtitles on a TED video page\" \/><\/p>\n<p>In most cases, the extension can automatically select the correct duration and appropriate bitrate audio, extract it via webffmpeg, and perform ASR recognition. If the automatic selection fails in\u4e2a\u522b\u4e2a\u522b (specific) cases, a manual media source selection function is retained.<\/p>\n<p>After ASR recognition, it calls your pre-configured LLM to translate into the specified target language. The subtitle overlay window can display the original text, translation, or both. Simultaneously, the sidebar on the right can display the complete subtitle list.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/03-03.jpg\" alt=\"Liusheng Subtitles showing subtitle overlay and sidebar on an X video page\" \/><\/p>\n<p>You can double-click items in the sidebar subtitle list to jump to that point. After subtitles are fully generated, they can also be manually edited, and SRT export is supported.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/04-04.jpg\" alt=\"Bilingual subtitle list in the Liusheng Subtitles sidebar\" \/><\/p>\n<p>If you prefer to use only the overlay window, that&#8217;s fine too; the sidebar can be closed.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/05-05.jpg\" alt=\"Only the video subtitle overlay is displayed after closing the sidebar\" \/><\/p>\n<p>The extension itself does not provide model access services, so the ASR model and LLM need to be configured by the user.<\/p>\n<p>ASR models support the Whisper series and FunASR. LLMs support OpenAI and Anthropic-compatible formats.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/06-06.jpg\" alt=\"Liusheng Subtitles translation model and subtitle style settings\" \/><\/p>\n<p>For my own use, I generally deploy Speaches ASR locally via Docker, using the model <strong>Systran\/faster-whisper-large-v3.<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/07-07.jpg\" alt=\"Speaches ASR service running in Docker Desktop\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/08-08.jpg\" alt=\"Liusheng Subtitles configuring local Speaches ASR\" \/><\/p>\n<p>If you don&#8217;t want to deploy locally, you can also use Groq&#8217;s Whisper, which offers relatively good cost-performance.<\/p>\n<p>For translation models, generally using cheaper older models like Deepseek V3 is sufficient, and even models with lower parameters are often fine. The free credits from platforms like <a href=\"https:\/\/cloud.siliconflow.cn\/i\/My0p5Jgs\" target=\"_blank\" rel=\"noopener noreferrer\">Silicon Flow<\/a> can last a long time.<\/p>\n<p>If you want a completely free option, local deployment is also possible. Since it&#8217;s not real-time translation, waiting a bit longer for the translation to complete before watching doesn&#8217;t affect the viewing experience.<\/p>\n<p>VAD filtering can generally be left on automatic. It will auto-enable for supported cases to reduce hallucinations in silent segments. If low-volume whispers in a video aren&#8217;t being recognized, you can manually turn it off.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/09-09.jpg\" alt=\"Liusheng Subtitles configuring Silicon Flow translation model\" \/><\/p>\n<p>It also supports generating subtitles for local videos, simply by dragging the local video into the browser to play it.<\/p>\n<p>It&#8217;s just slightly more cumbersome: you need to go into the extension details and manually enable &#8220;Allow access to file URLs.&#8221;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/10-10.jpg\" alt=\"Enabling &apos;Allow access to file URLs&apos; on the Chrome extension details page\" \/><\/p>\n<p>Then manually drag the video into the browser to open it.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/11-11.jpg\" alt=\"Dragging a local video file into the Chrome browser\" \/><\/p>\n<p>After that, use it step by step as usual.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.liu-qi.cn\/articles\/2026\/09\/liusheng-subtitles\/12-12.jpg\" alt=\"Liusheng Subtitles generating subtitles for a local video in Chrome\" \/><\/p>\n<p>However, it&#8217;s\u539f\u5219\u4e0a (in principle) recommended for\u4e34\u65f6 (temporary\/occasional) use because there are actually more and simpler local solutions available. Moreover, you can use the full-fledged ffmpeg without performance limitations, and directly using an AI Agent for processing might be more convenient. If you truly need to batch process local files, the interface might\u53cd\u800c (conversely) seem redundant. This is also why I didn&#8217;t create a desktop version and chose the browser extension form factor instead.<\/p>\n<p>That&#8217;s all.<\/p>\n<p>Welcome everyone to try it out, use it, modify it, and give it a Star.<\/p>\n<p><a href=\"https:\/\/github.com\/Liu-Bot24\/liusheng-subtitles\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/Liu-Bot24\/liusheng-subtitles<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Web videos lack subtitles? Liusheng Subtitles is a free, open-source Chrome extension that automatically recognizes audio, generates, and translates bilingual subtitles. It supports local videos, subtitle editing, timeline jumping, and\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[25,34,33],"class_list":["post-1673","post","type-post","status-publish","format-standard","hentry","category-articles","tag-chrome-","tag-34","tag-33"],"_links":{"self":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts\/1673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1673"}],"version-history":[{"count":4,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts\/1673\/revisions"}],"predecessor-version":[{"id":1677,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts\/1673\/revisions\/1677"}],"wp:attachment":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}