בעברית תחילה, ואחריו באנגלית. / Hebrew first, English below.
Voice Reader היא תוסף Chrome (Manifest V3) שמקריא בקול טקסט שאתם מסמנים בדפדפן. התוסף פועל באופן מקומי לחלוטין בתוך הדפדפן:
- אין שרת ענן, אין API, אין חשבון משתמש, אין הרשמה.
- אין טלמטריה, אין אנליטיקס, אין מעקב. לא נמצאה בקוד שום קריאה ל-Google Analytics, sendBeacon, או כל שירות מעקב.
- אין קוד מרוחק. כל ה-WASM (מנוע ONNX Runtime ו-Piper phonemize) ארוז בתוך התוסף עצמו תחת
vendor/ונטען מ-chrome-extension://בלבד. איןeval, איןnew Function, אין טעינת סקריפט מרשת. - אין קריאה לעוגיות, סיסמאות, או שדות טופס. התוסף קורא רק את הטקסט המסומן (
window.getSelection()) לצורך ההקראה.
הקריאה החיצונית היחידה היא הורדה חד-פעמית של מודל הקול הנוירוני (Piper) משרת HuggingFace:
- כתובת:
https://huggingface.co/diffusionstudio/piper-voices/... - מה יורד: קובץ מודל הקול (
.onnx+.json), בגודל ~63–75MB, פעם אחת לכל קול. - המודל נשמר מקומית ב-OPFS (Origin Private File System) של הדפדפן; לאחר ההורדה הראשונה התוסף עובד לחלוטין במצב לא-מקוון.
- ההורדה היא קריאת נתונים בלבד (GET של קובץ). שום טקסט שלכם, שום מידע אישי, ושום נתוני שימוש אינם נשלחים ל-HuggingFace או לכל יעד אחר.
מדיניות ה-CSP (content_security_policy) במניפסט אוכפת זאת ברמת הדפדפן — connect-src מתיר רק את 'self' ואת דומייני HuggingFace. כל ניסיון תקשורת ליעד אחר ייחסם על ידי הדפדפן.
הערה טכנית: בספרייה הארוזה (
vendor/piper/piper-tts-web.js) קיימות כברירת-מחדל לא-פעילה קבועות שמצביעות ל-cdnjs/jsdelivr עבור קבצי WASM. הקוד שלנו (src/offscreen/offscreen.js) דורס ערכי ברירת-מחדל אלה ומפנה את כל קבצי ה-WASM לחבילה המקומית. בנוסף, ה-CSP חוסם דומיינים אלה ממילא.
| הרשאה | למה היא נחוצה |
|---|---|
contextMenus |
להוסיף את פריט התפריט "Voice Read" בלחיצה ימנית על טקסט מסומן (Explanatory / Storytelling). |
storage |
לשמור את העדפות המשתמש בלבד — מנוע נבחר, קול, מהירות, גובה צליל, ומצב הכתוביות. אין שמירת תוכן שנקרא. |
activeTab |
לפעול על הלשונית הפעילה כשהמשתמש מפעיל את ההקראה. |
scripting |
להזריק את סקריפט התוכן ללשוניות שכבר היו פתוחות לפני התקנת/רענון התוסף, כדי שההקראה תעבוד מיד. |
offscreen |
ליצור מסמך offscreen להשמעת אודיו ולהרצת מנוע Piper הנוירוני (MV3 אינו מאפשר השמעת אודיו ב-service worker). |
אין
host_permissionsנפרדות. ה-content_scriptsתואמים<all_urls>כדי שתוכלו להקריא טקסט בכל אתר — אך הסקריפט קורא רק את הטקסט שאתם מסמנים, ולא נוגע בעוגיות, סיסמאות או טפסים.
לא נאסף ולא משודר שום מידע אישי.
- אין שליחת תוכן הדף או הטקסט המסומן לשום שרת חיצוני.
- אין מזהים ייחודיים, אין מעקב משתמשים, אין פרופילים.
- הנתון היחיד הנשמר הוא הגדרות התוסף (
vr_settingsב-chrome.storage.sync, ומצב כתוביות ב-chrome.storage.local). נתון זה נשמר בדפדפן/חשבון Google שלכם בלבד ומשמש את התוסף בלבד. - הטקסט המסומן נשלח אך ורק למסמך ה-offscreen המקומי לצורך סינתזת הקול, ולעולם לא לרשת.
מצאתם בעיית אבטחה? אנא פתחו GitHub Issue במאגר הפרויקט עם תיאור הבעיה ושלבי השחזור. לבעיה רגישה, ציינו זאת ב-Issue ואנו נתאם ערוץ דיווח פרטי.
Voice Reader is a Chrome (Manifest V3) extension that reads selected text aloud in your browser. It runs fully locally inside the browser:
- No cloud server, no API, no user account, no sign-up.
- No telemetry, no analytics, no tracking. No Google Analytics,
sendBeacon, or any tracking service was found in the code. - No remote code. All WASM (ONNX Runtime and Piper phonemize) is bundled inside the extension under
vendor/and loaded only fromchrome-extension://. Noeval, nonew Function, no remote script loading. - No access to cookies, passwords, or form fields. The extension reads only the selected text (
window.getSelection()) for synthesis.
The only external network call is a one-time download of the neural voice model (Piper) from HuggingFace:
- URL:
https://huggingface.co/diffusionstudio/piper-voices/... - What is downloaded: the voice model file (
.onnx+.json), ~63–75MB, once per voice. - The model is cached locally in the browser's OPFS (Origin Private File System); after the first download the extension works fully offline.
- The download is data-only (a GET of a file). No text of yours, no personal data, and no usage data is ever sent to HuggingFace or any other destination.
The manifest content_security_policy enforces this at the browser level — connect-src allows only 'self' and HuggingFace domains. Any attempt to reach any other host is blocked by the browser.
Technical note: the bundled library (
vendor/piper/piper-tts-web.js) contains inactive default constants pointing to cdnjs/jsdelivr for WASM files. Our code (src/offscreen/offscreen.js) overrides these defaults and points all WASM to the locally bundled package. The CSP also blocks those domains regardless.
| Permission | Why it is needed |
|---|---|
contextMenus |
Adds the "Voice Read" right-click menu on selected text (Explanatory / Storytelling). |
storage |
Stores user preferences only — chosen engine, voice, speed, pitch, and captions state. No read content is stored. |
activeTab |
Operates on the active tab when the user triggers a read. |
scripting |
Injects the content script into tabs that were already open before the extension was installed/reloaded, so reading works immediately. |
offscreen |
Creates an offscreen document for audio playback and to run the Piper neural engine (MV3 does not allow audio playback in a service worker). |
There are no separate
host_permissions. Thecontent_scriptsmatch<all_urls>so you can read text on any site — but the script reads only the text you select and never touches cookies, passwords, or forms.
No personal data is collected or transmitted.
- Page content and selected text are never sent to any external server.
- No unique identifiers, no user tracking, no profiles.
- The only data stored is the extension settings (
vr_settingsinchrome.storage.sync, and the captions toggle inchrome.storage.local). This lives only in your browser / Google account and is used only by the extension. - Selected text is passed only to the local offscreen document for voice synthesis, never to the network.
Found a security issue? Please open a GitHub Issue on the project repository describing the problem and reproduction steps. For sensitive issues, note this in the Issue and we will arrange a private reporting channel.