Skip to content

Releases: QW-AI-Code/doble-parsi

Doble Parsi v1.0.1

Choose a tag to compare

@github-actions github-actions released this 19 Sep 04:47

Doble Parsi v1.0.1

Dub the audio of any browser tab live with AI, then keep the MP3 and the SRT/VTT subtitles named exactly after the video.

Downloads

File What it is
doble-parsi-1.0.1-chrome.zip Main extension package. Unzip it, then load it in Chrome/Edge via Load unpacked.
doble-parsi-1.0.1.crx Signed package (optional).

Install in one minute

  1. Download and unzip doble-parsi-1.0.1-chrome.zip.
  2. Open chrome://extensions (or edge://extensions).
  3. Turn on Developer mode.
  4. Click Load unpacked and pick the unzipped folder.
  5. Open the popup, paste your Gemini API key, choose a language, press Start dubbing.

Requires Chrome or Edge 116+.

What's new

  • Subtitles on the video itself — the translation sits on the picture, in a Shadow DOM, so the site's CSS cannot reach it. It follows resizing, scrolling and fullscreen with observers, not a timer.

  • One line, draggable — only the translation is shown; grab the handle and move it, it snaps to nine anchor points and remembers the spot.

  • Six themes — Aurora, Neon, Cinema, Ribbon, Slate and Paper. Pick one from the visual chips and the video updates instantly, mid-session.

  • Right-to-left done properly — a Persian line reads right-to-left, and Latin runs inside it are wrapped in Unicode isolates so the sentence does not scramble.

  • Progressive sentence highlight — the spoken part colours in as it plays, drawn with the CSS Custom Highlight API, so the text stays selectable.

  • Automatic contrast — a tiny probe of the frame behind the line flips the plate light or dark, and disables itself on a cross-origin video.

  • The site's own captions come first — a timed caption track is translated instead of the audio: exact timing, no tab capture, no dubbing cost. Discovery goes through the player's caption list, the page's network trace, and the browser's own WebVTT parser.

  • Nothing to configure — the model detects the source language. One dropdown picks the target language (Persian by default), and an optional box says in what tone to translate.

  • Subtitle-only sessions — one button gives you an exactly timed translated subtitle without any dubbing, exportable as SRT or VTT.

  • Translation memory — translated lines are kept in IndexedDB per line and per video. Re-watching sends zero requests; the popup shows the size and clears it.

  • A failed translation says so — the caption path uses a JSON schema so numbering never drifts, and a model that cannot be reached is reported instead of silently showing the untranslated original.

  • A key test and a model finder — one button checks the API key and the connection and says exactly what came back: works, key rejected, out of quota (with the retry delay the service asked for), or model missing. A second button probes the models one by one and lists only the ones that actually answered on your key, the thriftiest first, because not every model is reachable on the free tier.

  • Token usage and quota, counted locally — a card shows today's input, output, audio-in, audio-out and text tokens, the billed turns, the sessions and the peak context. Enter the daily budget from AI Studio and you get a progress bar, the percentage and what is left. The counter resets at midnight Pacific, the same rule the Gemini API uses for its per-day limits, and the remaining time is shown. Google exposes no endpoint for the remaining quota, so these are the extension's own numbers, read from the usageMetadata block that both the live socket and the subtitle requests return — approximate, with a link to Google's authoritative dashboard.

  • Fewer, larger requests instead of more parallel ones — a rate limit is not beaten by more concurrency, it is beaten by asking less often. Batches went from 40 to 80 lines, so the same subtitle costs half the requests. On a 429 the client drops to a single request in flight, waits exactly as long as the service asked in retryDelay, and stops after the second refusal rather than grinding on. What was already translated is kept and the popup says how many lines are still missing.

  • One switch for the original wording — flip it and the video shows the source line instead of the translation, in its own reading direction, on the very next frame. Both versions travel with the cue, so nothing is fetched or translated again.

  • Your own colours — pick the plate colour, its opacity and the colour the spoken part lights up in. Every theme accepts them, including the two that normally carry no plate at all, and switching the option off hands the colours back to the theme.

  • Themes you can actually read — the six samples are stacked one per row with a full sample sentence instead of three cramped columns, and they preview in the colours that will really appear on the video.

  • Collapsible sections — every block in the popup folds. They all start closed so the window stays short, and whichever ones you open are remembered for next time.

  • A new video clears the old subtitle by itself — the stage fingerprints what is playing and drops the previous cues the moment anything real about it changes, so a stale subtitle can no longer sit on top of the next clip. Switching on a site that never reloads the page is caught too. A notification counter jumping in the tab title is not mistaken for a new video. With "carry on with the next video" left on, the new clip is fetched and translated on its own, and because re-watching comes from translation memory, going back costs nothing.

  • Two paths, side by side — the dub button and the subtitle button sit together under the main action, the second one in its own colour. Run either alone or both at once: dubbing gives you the voice, the subtitle path gives you exactly timed text, and neither needs the other.

  • Captions are found even when the player is late with them — a player that has just started does not have its caption list ready, and a single look used to be reported as "this video has no captions" while it plainly had some. The list is now waited for inside the page, the player is nudged into loading its own caption module, and the whole discovery is repeated a handful of times over a few seconds. None of that costs an API request, the popup says which attempt it is on, and a player that is ready is never made to wait.

  • No captions at all? It translates live — when a video really ships no caption track, the audio path takes over by itself: the tab's sound is captured, translated as it plays and written on the picture, with the dub voice switched off. You get live subtitles without a dub, and the switch can be turned off if you would rather keep the quota.

  • The player's own captions are switched on for you — YouTube only builds its caption list once CC is on, which is why a video with subtitles could keep insisting it had none. Pressing the subtitle button now turns the player's CC on, takes the caption file and turns CC straight back off before translating, so its own subtitles flash by for a moment instead of sitting there the whole time. Captions you had already enabled are left alone.

Security audit

Area Result
Remote code None. No CDN, no remote script, no eval. CSP is script-src 'self' 'wasm-unsafe-eval'.
Network destinations Exactly one: the AI live endpoint declared in host_permissions. No analytics or telemetry.
API key handling Stored locally with chrome.storage.local, sent only to that endpoint over TLS, never synced or logged.
Host access No <all_urls>, no tabs permission, no content scripts. Page access via activeTab only, after you click the icon.
Injected script Two, on demand only: a metadata reader that returns the title and caption list, and the subtitle stage inside its own closed Shadow DOM. Neither writes to the page.
File writes Only through chrome.downloads. Paths are sanitised twice and .. segments dropped, so writes stay inside the downloads folder.
Bundled encoder A pre-built WebAssembly MP3 encoder under MPL-2.0, in a worker with no network access, receiving PCM only.
Third-party runtime dependencies None. The build, lint and test tooling is plain Node.js.
Data retention Nothing leaves your machine except the audio sent for translation. The session snapshot clears on browser restart.
Artifact integrity Built by the release workflow and published with a SHA-256 checksum file.

Full details: README · CHANGELOG · SECURITY


دوبله پارسی نسخهٔ v1.0.1

صدای هر تب مرورگر را زنده و با هوش مصنوعی دوبله کن، بعد فایل MP3 و زیرنویس SRT/VTT را دقیقاً هم‌نام همان ویدئو تحویل بگیر.

فایل‌های دانلود

فایل چیست
doble-parsi-1.0.1-chrome.zip فایل اصلی اکستنشن. آن را دانلود و از حالت فشرده خارج کن، سپس در کروم با Load unpacked بارگذاری کن.
doble-parsi-1.0.1.crx بستهٔ امضاشده (اختیاری).

نصب در یک دقیقه

۱. فایل doble-parsi-1.0.1-chrome.zip را دانلود و از حالت فشرده خارج کن.
۲. در مرورگر chrome://extensions (یا edge://extensions) را باز کن.
۳. گزینهٔ Developer mode را روشن کن.
۴. روی Load unpacked بزن و پوشهٔ خارج‌شده را انتخاب کن.
۵. پاپ‌آپ را باز کن، کلید API جِمینای را بچسبان، زبان را انتخاب کن و شروع دوبله را بزن.

به کروم یا اِج نسخهٔ ۱۱۶ و بالاتر نیاز دارد.

تازه‌ها

  • زیرنویس روی خودِ ویدئو — ترجمه روی تصویر می‌نشیند، داخل یک <spa...
Read more

Doble Parsi v1.0.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 11:26

Doble Parsi v1.0.0

Dub the audio of any browser tab live with AI, then keep the MP3 and the SRT/VTT subtitles named exactly after the video.

Downloads

File What it is
doble-parsi-1.0.0-chrome.zip Main extension package. Unzip it, then load it in Chrome/Edge via Load unpacked.
doble-parsi-1.0.0.crx Signed package (optional).

Install in one minute

  1. Download and unzip doble-parsi-1.0.0-chrome.zip.
  2. Open chrome://extensions (or edge://extensions).
  3. Turn on Developer mode.
  4. Click Load unpacked and pick the unzipped folder.
  5. Open the popup, paste your Gemini API key, choose a language, press Start dubbing.

Requires Chrome or Edge 116+.

What's new

  • Live tab dubbing — the active tab's audio is captured, translated as it plays and dubbed back within a couple of seconds.
  • The original speaker's voice — the live translation model reproduces the speaker's own voice, so there is no voice setting to get wrong.
  • 31 dubbing languages — Persian by default, 30 more in one dropdown.
  • MP3 export — dub only or dub mixed with the original, at 96 / 128 / 192 kbps.
  • SRT / VTT subtitles — timed from the live transcript, with an adjustable delay offset and an optional second file in the source language.
  • Files named after the video — the real title is read from the page, cleaned up and used for both the folder and the file names.
  • Tidy downloads — every session lands in Downloads/Doble Parsi/<video name>/, and the .srt extension is never rewritten.
  • Bilingual interface — Persian (RTL) and English (LTR), switching instantly, with the Vazirmatn font bundled so nothing loads from the internet.
  • Click-free audio path — a ring-buffer player and windowed-sinc resampling replaced per-chunk playback, and the encoder now receives proper 16-bit samples, so recordings hold no crackle or white noise.
  • Warning-free load — the invalid string author key was removed from the manifest, so chrome://extensions reports no warnings.
  • Self-healing sessions — the socket reconnects and resumes on its own, and closing the tab still saves your files.

Security audit

Area Result
Remote code None. No CDN, no remote script, no eval. CSP is script-src 'self' 'wasm-unsafe-eval'.
Network destinations Exactly one: the AI live endpoint declared in host_permissions. No analytics or telemetry.
API key handling Stored locally with chrome.storage.local, sent only to that endpoint over TLS, never synced or logged.
Host access No <all_urls>, no tabs permission, no content scripts. Page access via activeTab only, after you click the icon.
Injected script One function, metadata only: it reads the video title and writes nothing.
File writes Only through chrome.downloads. Paths are sanitised twice and .. segments dropped, so writes stay inside the downloads folder.
Bundled encoder A pre-built WebAssembly MP3 encoder under MPL-2.0, in a worker with no network access, receiving PCM only.
Third-party runtime dependencies None. The build, lint and test tooling is plain Node.js.
Data retention Nothing leaves your machine except the audio sent for translation. The session snapshot clears on browser restart.
Artifact integrity Built by the release workflow and published with a SHA-256 checksum file.

Full details: README · CHANGELOG · SECURITY


دوبله پارسی نسخهٔ v1.0.0

صدای هر تب مرورگر را زنده و با هوش مصنوعی دوبله کن، بعد فایل MP3 و زیرنویس SRT/VTT را دقیقاً هم‌نام همان ویدئو تحویل بگیر.

فایل‌های دانلود

فایل چیست
doble-parsi-1.0.0-chrome.zip فایل اصلی اکستنشن. آن را دانلود و از حالت فشرده خارج کن، سپس در کروم با Load unpacked بارگذاری کن.
doble-parsi-1.0.0.crx بستهٔ امضاشده (اختیاری).

نصب در یک دقیقه

۱. فایل doble-parsi-1.0.0-chrome.zip را دانلود و از حالت فشرده خارج کن.
۲. در مرورگر chrome://extensions (یا edge://extensions) را باز کن.
۳. گزینهٔ Developer mode را روشن کن.
۴. روی Load unpacked بزن و پوشهٔ خارج‌شده را انتخاب کن.
۵. پاپ‌آپ را باز کن، کلید API جِمینای را بچسبان، زبان را انتخاب کن و شروع دوبله را بزن.

به کروم یا اِج نسخهٔ ۱۱۶ و بالاتر نیاز دارد.

تازه‌ها

  • دوبلهٔ زندهٔ تب — صدای تب فعال گرفته می‌شود، همان لحظه ترجمه می‌شود و با چند ثانیه تأخیر دوبله پخش می‌شود.
  • صدای خودِ گویندهٔ اصلی — مدل ترجمهٔ زنده صدای گوینده را بازسازی می‌کند، پس هیچ تنظیم صدایی نیست که اشتباه ست شود.
  • ۳۱ زبان دوبله — فارسی پیش‌فرض، ۳۰ زبان دیگر در یک فهرست.
  • خروجی MP3 — فقط دوبله یا میکس با صدای اصلی، با کیفیت 96 / 128 / 192 kbps.
  • زیرنویس SRT / VTT — از متن زندهٔ دوبله، با جبران تأخیر قابل تنظیم و یک فایل اختیاری به زبان اصلی.
  • نام فایل‌ها هم‌نام ویدئو — نام واقعی از داخل صفحه خوانده، پاک‌سازی و برای نام پوشه و فایل‌ها استفاده می‌شود.
  • پوشهٔ دانلود مرتب — هر جلسه در Downloads/Doble Parsi/<video name>/ می‌نشیند و پسوند .srt دست‌نخورده می‌ماند.
  • رابط دوزبانه — فارسی (راست‌چین) و انگلیسی (چپ‌چین) با جابه‌جایی فوری و فونت وزیرمتن همراه بسته، پس هیچ چیز از اینترنت گرفته نمی‌شود.
  • مسیر صوتی بدون تِرَق — پخش‌کنندهٔ بافر حلقه‌ای و بازنمونه‌برداری sinc جای پخش تکه‌تکه را گرفت و انکودر نمونهٔ درست ۱۶ بیتی می‌گیرد، پس ضبط نه خش دارد و نه نویز سفید.
  • بارگذاری بدون هشدار — کلید نامعتبر author از مانیفست حذف شد، پس chrome://extensions هیچ هشداری نشان نمی‌دهد.
  • جلسه‌های خودترمیم — اتصال خودش برمی‌گردد و جلسه را ادامه می‌دهد، و بستن تب هم فایل‌ها را ذخیره می‌کند.

خلاصهٔ ممیزی امنیتی

بخش نتیجه
کد راه دور ندارد. نه CDN، نه اسکریپت بیرونی، نه eval. سیاست امنیتی script-src 'self' 'wasm-unsafe-eval' است.
مقصدهای شبکه فقط یکی: همان سرویس هوش مصنوعی که در host_permissions اعلام شده. نه آنالیتیکس، نه تلمتری.
نگهداری کلید API محلی در chrome.storage.local، فقط روی TLS به همان سرویس فرستاده می‌شود، بدون همگام‌سازی و بدون لاگ.
دسترسی به سایت‌ها نه <all_urls>، نه دسترسی tabs، نه content script. دسترسی به صفحه فقط با activeTab و بعد از کلیک تو.
کد تزریق‌شده یک تابع، فقط متادیتا: عنوان ویدئو را می‌خواند و چیزی نمی‌نویسد.
نوشتن فایل فقط از راه chrome.downloads. مسیرها دو بار پاک‌سازی می‌شوند و بخش‌های .. حذف می‌شوند، پس نوشتن داخل پوشهٔ دانلود می‌ماند.
انکودر همراه بسته انکودر MP3 از پیش ساخته‌شده با مجوز MPL-2.0، در ورکر بدون دسترسی شبکه، که فقط PCM می‌گیرد.
وابستگی‌های شخص ثالث ندارد. ابزار بیلد، لینت و تست همه نود خالص است.
نگهداری داده هیچ چیز از دستگاه تو بیرون نمی‌رود جز صدایی که برای ترجمه می‌رود. وضعیت جلسه با شروع مرورگر پاک می‌شود.
اصالت فایل‌ها با ورک‌فلوی ریلیز ساخته و همراه فایل چک‌سام SHA-256 منتشر می‌شوند.

جزئیات کامل: README فارسی · CHANGELOG · SECURITY


دوبله پارسی (doble-parsi) نسخه ۱.۰.۰ doble-parsi یک افزونهٔ متن‌باز و کاملاً رایگان برای دوبلهٔ ویدیو است که به‌عنوان جایگزینی برای افزونهٔ livdub توسعه یافته است. چرا doble-parsi؟

بدون هزینهٔ اشتراک: در افزونهٔ livdub، امکاناتی مانند ضبط و ذخیرهٔ فایل صوتی دوبله و همچنین خروجی گرفتن از فایل زیرنویس دوبله نیازمند خرید اشتراک است. در doble-parsi تمام این قابلیت‌ها به‌صورت رایگان در اختیار شماست.
رابط کاربری حرفه‌ای‌تر: طراحی UI بازنویسی و بهینه‌سازی شده تا کار با افزونه ساده‌تر و سریع‌تر باشد.
پشتیبانی کامل از زبان فارسی: رابط کاربری و امکانات به‌طور کامل فارسی‌سازی شده است.
پیاده‌سازی ساده: تمام این قابلیت‌ها با روشی بسیار ساده و کاربرپسند پیاده‌سازی شده‌اند.

امکانات
فهرست کامل قابلیت‌ها در بخش‌های بعدی همین مستندات شرح داده شده است.


آموزش نصب و راه اندازی افزونه را میتونید از لینک زیر مشاهده کنید.

آموزش نصب و راه اندازی افزونه


⚠️ یادآوری مهم پیش از استفاده از افزونه

برای اینکه افزونه دوبله پارسی (v1.0.0) بتواند فرآیند دوبله را به‌درستی و بدون خطا انجام دهد، حتماً به نکات زیر توجه کنید:

۱. استفاده از VPN الزامی است.
این افزونه برای تولید و پردازش گفتار از API هوش مصنوعی Ge...

Read more