[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81099":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":21,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},81099,"echoly","sonpiaz\u002Fecholy","sonpiaz","Live YouTube translation Chrome extension. Hear any video in your language. Two tiers (sub-second Realtime \u002F cheaper Standard), 13 languages, runs on your own Kyma API key.","https:\u002F\u002Fkymaapi.com",null,"JavaScript",41,22,40,0,1,44.69,"MIT License",false,"main",true,[],"2026-06-12 04:01:31","# Echoly — Live YouTube Translation\n\n> Hear any YouTube video in your language. Live AI dubbing, runs on your own [Kyma](https:\u002F\u002Fkymaapi.com) key.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"store-assets\u002Fscreenshots\u002F01-popup.png\" alt=\"Echoly popup\" width=\"380\">\n\u003C\u002Fp>\n\nChrome MV3 extension that overlays a live AI voice-over onto any YouTube video. Two tiers:\n\n- **Realtime** — WebRTC P2P, sub-second lag, 9 OpenAI voices or auto-clone of the speaker. ~$0.46 \u002F 10 min.\n- **Standard** — chunked pipeline (Whisper → Gemini → MiniMax), ~5s lag, 5 curated multilingual voices. ~$0.25 \u002F 10 min.\n\n13 target languages. No account, no telemetry, no Echoly-operated server.\n\n## Install\n\n### From Chrome Web Store *(coming soon)*\n\nThe submission is in review at the Chrome Web Store. Once approved, install with one click.\n\n### From source (developer mode)\n\n1. Clone or download this repo\n2. Open `chrome:\u002F\u002Fextensions`\n3. Toggle **Developer mode** (top-right)\n4. Click **Load unpacked**\n5. Select the cloned folder\n6. Pin Echoly to the toolbar\n\nUpdate with `git pull` and click the reload icon on the extension card.\n\n## Use\n\n1. Open any YouTube video\n2. Click the Echoly icon\n3. Paste your Kyma API key from [kymaapi.com](https:\u002F\u002Fkymaapi.com)\n4. Pick a tier, target language, and voice\n5. Click **Start** — the dub plays and the on-page panel renders the live translation\n6. Drag the panel by its toolbar; resize from any edge or corner\n\nYou can change voice or language mid-session — Realtime hot-swaps in \u003C1s, Standard picks up the change on the next 5s chunk.\n\n## How it works\n\n```\npopup ◄──BACKGROUND_STATE_UPDATE──── background ◄──CONTENT_STATE──── content (YT page)\n       ───START \u002F UPDATE_SETTINGS───►          ───CONTENT_START───►\n```\n\n- **popup.html \u002F popup.js** — passive renderer, no own state.\n- **background.js** — single source of truth for `state`. Injects content script via `chrome.scripting.executeScript` if not yet present.\n- **content.js** — captures the YT video element audio, builds the in-page overlay panel, and runs the active pipeline:\n  - **Realtime tier**: mints a Kyma ephemeral token, opens P2P WebRTC with OpenAI Realtime.\n  - **Standard tier**: chunks the audio into 5s windows via `MediaRecorder`, re-encodes to WAV client-side, then runs Whisper transcription → Gemini translation → MiniMax TTS per chunk through the Kyma gateway. Web Audio scheduling queues the resulting mp3 chunks back-to-back.\n\nToken-guarded async pattern (`pageToken` captured in closure, checked before any state mutation) keeps stale callbacks from corrupting newer sessions when the user changes settings or stops mid-pipeline. An `AbortController` per Standard session cancels in-flight fetches the moment Stop is clicked, so credits aren't burned on orphaned chunks.\n\n## Features\n\n- One-key onboarding (paste Kyma key → Start)\n- 13 target languages: English, Vietnamese, Japanese, Korean, Chinese, French, Spanish, German, Portuguese, Hindi, Indonesian, Italian, Russian\n- Drag\u002Fresize on-page overlay panel with persisted layout\n- Translation history (last 16 turns, scrollable)\n- Source caption rendering (toggle in popup)\n- Independent volume sliders for original audio and dub\n- Voice amplification up to 2× via Web Audio GainNode\n- Instant pause\u002Fplay (no reconnect)\n- 60-min hard auto-stop with a one-shot 5-min warning\n- Tab close cleanup via `keepalive` POST so Kyma sees the session end\n\n## Standard tier voices\n\nCurated from MiniMax's 333-voice catalog. All multilingual — each voice speaks any of the 13 target languages.\n\n- **Magnetic Man** — US, male\n- **Captivating Female** — US, female\n- **Deep Voice Man** — US, male\n- **Confident Woman** — US, female\n- **News Anchor** — female\n\n## Privacy\n\nEcholy does not collect, store, or sell any personal data. Your Kyma API key stays on your own device. Audio is sent directly to AI providers (Kyma, and OpenAI for Realtime tier) for the sole purpose of producing the translation. There is no Echoly-operated server.\n\nFull policy: [`store-assets\u002Fprivacy-policy.html`](store-assets\u002Fprivacy-policy.html)\n\n## Build a release zip\n\n```bash\n.\u002Fpack.sh\n# → ~\u002Fecholy-vX.Y.Z.zip\n```\n\nReads the version from `manifest.json`, excludes `.git`, `.DS_Store`, `node_modules`. Drop the resulting zip into the Chrome Web Store Developer Console for an update, or share it for manual sideload.\n\n## Roadmap\n\n- Per-tab session log (live cost meter)\n- Language warming on hover (sub-200ms switches in Realtime)\n- Dictionary lookup on highlighted source caption text\n- Firefox port (MV3 manifest portability TBD)\n\n## Contributing\n\nIssues and PRs welcome. The codebase is plain vanilla JS — no build step, no dependencies. Pre-flight checklist before opening a PR:\n\n- `node --check content.js && node --check background.js && node --check popup.js`\n- Manual test in a freshly reloaded extension on at least one English YouTube video, both tiers\n- If you touch `manifest.json`, bump the version and update both `manifest.json` and `content.js`'s `ECHOLY_VERSION` constant in lock-step\n\n## License\n\n[MIT](LICENSE) © 2026 Son Nguyen Tung\n","Echoly 是一个实时翻译 YouTube 视频的 Chrome 扩展程序，支持将视频内容以用户选择的语言进行即时语音播报。该项目提供两种服务层级：Realtime 层级利用 WebRTC 技术实现次秒级延迟的高质量翻译，并可自动克隆原声或使用 9 种 OpenAI 语音；Standard 层级则通过分块处理技术（Whisper 转录 → Gemini 翻译 → MiniMax 文本转语音）提供约 5 秒延迟的服务，且成本更低。Echoly 支持 13 种目标语言，运行依赖于用户的 Kyma API 密钥，不涉及任何第三方服务器操作，确保隐私安全。此工具非常适合需要跨语言理解在线教育、国际新闻报道等 YouTube 内容的学习者和专业人士使用。",2,"2026-06-11 04:03:30","CREATED_QUERY"]