{"id":46654813,"url":"https://github.com/sglkc/moegi","last_synced_at":"2026-03-08T07:31:48.673Z","repository":{"id":187647528,"uuid":"672411942","full_name":"sglkc/moegi","owner":"sglkc","description":"🎵 A Spotify web extension for Chromium browsers to style, translate, and romanize lyrics. Supports Chinese, Japanese, Korean, Cyrillic, and more!","archived":false,"fork":false,"pushed_at":"2025-12-06T13:00:15.000Z","size":22810,"stargazers_count":40,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-10T06:44:26.603Z","etag":null,"topics":["chrome","chrome-extension","chromium","chromium-extension","cyrillic","japanese","javascript","korean","lyrics","romanization","spotify","translation","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sglkc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-30T01:57:45.000Z","updated_at":"2025-12-06T12:59:41.000Z","dependencies_parsed_at":"2024-01-08T15:46:03.810Z","dependency_job_id":"efd0e417-a20b-4c23-b6b4-fb9b1c76734e","html_url":"https://github.com/sglkc/moegi","commit_stats":null,"previous_names":["sglkc/moegi"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/sglkc/moegi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sglkc%2Fmoegi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sglkc%2Fmoegi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sglkc%2Fmoegi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sglkc%2Fmoegi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sglkc","download_url":"https://codeload.github.com/sglkc/moegi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sglkc%2Fmoegi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30248867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T05:41:50.788Z","status":"ssl_error","status_checked_at":"2026-03-08T05:41:39.075Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome","chrome-extension","chromium","chromium-extension","cyrillic","japanese","javascript","korean","lyrics","romanization","spotify","translation","typescript"],"created_at":"2026-03-08T07:31:47.540Z","updated_at":"2026-03-08T07:31:48.666Z","avatar_url":"https://github.com/sglkc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eMoegi\u003c/h1\u003e\n  \u003cvideo src=\"https://github.com/sglkc/moegi/assets/31957516/811b1143-d51f-4084-84ff-39da63b99c47\" width=\"360\" autoplay=\"false\" \u003e\u003c/video\u003e\n\n  \u003cbr /\u003e\n\n  [![MIT License](https://img.shields.io/github/license/sglkc/moegi)](LICENSE)\n  [![Issues](https://img.shields.io/github/issues/sglkc/moegi)](https://github.com/sglkc/moegi/issues)\n  [![Pull Requests](https://img.shields.io/github/issues-pr/sglkc/moegi)](https://github.com/sglkc/moegi/pulls)\n  [![Latest Release](https://img.shields.io/github/v/release/sglkc/moegi)](https://github.com/sglkc/moegi/releases/latest)\n\n  \u003cstrong\u003eAn extension for Chromium browsers to customize lyrics in Spotify Web Player.\u003c/strong\u003e\n\n  \u003ca href=\"https://github.com/sglkc/moegi/issues\"\u003eReport a Bug\u003c/a\u003e\n  \u003cstrong\u003e·\u003c/strong\u003e\n  \u003ca href=\"https://github.com/sglkc/moegi/issues\"\u003eRequest a Feature\u003c/a\u003e\n\n  Features lyrics translation for over 100 languages powered by Google Translate and \\\n  romanization for Chinese, Korean, Japanese, Cyrillic, and many more non-latin scripts! \\\n  *Tested on Google Chrome (135.0.7049.52) and Brave Browser (137.1.79.119) on Linux*\n\n  \u003cbr /\u003e\n\u003c/div\u003e\n\n## What's New in Version 2?\n\nMost of the changes affects developer experience instead of users, you may not notice anything different from version 1 except some layout or text changes. My main focus is to migrate the framework from CRXJS to WXT for more streamlined development.\n\nThere are some things to do:\n- Rework to WXT 💚\n- Auto-release on new tags (ci/cd) 💚\n- Reset defaults button\n- DeepL translation 💔 (https://github.com/sglkc/moegi/pull/20)\n- Reimplement fullscreen handling 💚\n- Implement active lyric listener\n- Picture-in-picture lyrics\n- Update README, video, and screenshots\n\n## Getting Started\n\nChromium browsers doesn't support installing extensions directly outside of Chrome Web Store, so follow these steps carefully:\n\n1. Download the **latest release (moegi-x.x.x.zip)** archive from https://github.com/sglkc/moegi/releases/latest\n2. **Extract and remember the location** of the extracted folder (moegi-x.x.x)\n3. Open Chrome extensions page at ***chrome://extensions***\n4. Toggle **developer mode** at the topmost bar\n5. Click on the new **Load unpacked** button\n6. Find and **select the folder** you extracted earlier (moegi-x.x.x)\n7. Moegi should be added to the list and switched on, pin the extension for easy access\n   - Click on the puzzle piece icon on the top-right\n   - Find Moegi and click on the pin icon\n8. Open Spotify Web Player (https://open.spotify.com)\n9. Play any song and open the lyrics page by clicking the microphone icon on bottom-right\n10. If you click on Moegi, it should now display a popup, nice!\n\n\u003cdetails\u003e\n  \u003csummary\u003eSteps screenshot\u003c/summary\u003e\n  \u003cimg src=\"docs/extensions.png\" alt=\"Moegi installation\" /\u003e\n  \u003cimg src=\"docs/loaded.png\" alt=\"Moegi loaded\" /\u003e\n\u003c/details\u003e\n\n## Features\n\n\u003cdetails\u003e\n  \u003csummary\u003eShow full extension features screenshot\u003c/summary\u003e\n  \u003cimg src=\"https://github.com/sglkc/moegi/assets/31957516/a53cb8cb-3162-49f0-973d-e9558edcaa83\" alt=\"Moegi all features\" width=\"320\" /\u003e\n\u003c/details\u003e\n\n### Lyrics Styling\n\nThe most basic feature to customize your Spotify lyrics screen:\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Text Align | Left | Left, Center, Right |\n| Font Size | 1em | 0.5-2.5em |\n| Spacing | 0px | 0-64px |\n| Colors | None | Background, Passed, Active, Inactive, Translation, Romanization |\n\n\u003e There is an integration issue with the colors, so if you want to reset the colors, use the Reset to defaults button\n\n### Translation\n\nLibrary used: [google-translate-api-x](https://github.com/AidanWelch/google-translate-api)\n\nTranslate lyrics line-by-line using Google Translate, successful translations are cached temporarily in storage to avoid Google Translate limit.\nNote that translations are not accurate and should not be used literally! [Read about privacy policy.](#privacy-policy)\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Font Size | 1em | 0.5-1.5em |\n| Language Target | auto | [Over 100 languages](https://cloud.google.com/translate/docs/languages) |\n\n### Romanization\n\nRomanize lyrics automatically by detecting the script of each text segment. The extension will apply the appropriate romanization system based on the detected Unicode script.\n\nSupported scripts:\n1. [Japanese](#japanese) (Hiragana, Katakana, Kanji)\n2. [Korean](#korean) (Hangul)\n3. [Chinese](#chinese) (Hanzi)\n4. [Cyrillic](#cyrillic)\n\nOther scripts will use the [Any-ASCII fallback](#any).\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Auto-detection | Enabled | Automatic based on Unicode script |\n| Font Size | 1em | 0.5-1.5em |\n\n#### Japanese\n\nLibraries used: [@sglkc/kuroshiro](https://github.com/sglkc/kuroshiro-ts),\n[@sglkc/kuroshiro-analyzer-kuromoji](https://github.com/sglkc/kuroshiro-analyzer-kuromoji-ts)\n\nNote that Japanese romanization may not be accurate, particularly on kanji!\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| To | Romaji | Romaji, Hiragana, Katakana |\n| Mode | Spaced | Normal, Spaced, Okurigana, Furigana |\n| Romaji System | Hepburn | Nippon, Passport, Hepburn |\n| Okurigana Delimiter | (  ) | Custom delimiters |\n\n\u003cdetails\u003e\n  \u003csummary\u003eDifferences between each mode in hiragana\u003c/summary\u003e\n  \u003cbr /\u003e\n\n  **Original Text: 感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高！**\n\n  1. Normal: \\\n    かんじとれたらてをつなごう、かさなるのはじんせいのライン and レミリアさいこう！\n\n  2. Spaced: \\\n     かんじとれ たら て を つなご う 、 かさなる の は じんせい の ライン   and   レミ リア さいこう ！\n\n  3. Okurigana: \\\n     感(かん)じ取(と)れたら手(て)を繋(つな)ごう、重(かさ)なるのは人生(じんせい)のライン and レミリア最高(さいこう)！\n\n  4. Furigana: \\\n     \u003cruby\u003e感\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eかん\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eじ\u003cruby\u003e取\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eと\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eれたら\u003cruby\u003e手\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eて\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eを\u003cruby\u003e繋\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eつな\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eごう、\u003cruby\u003e重\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eかさ\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eなるのは\u003cruby\u003e人生\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eじんせい\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003eのライン and レミリア\u003cruby\u003e最高\u003crp\u003e(\u003c/rp\u003e\u003crt\u003eさいこう\u003c/rt\u003e\u003crp\u003e)\u003c/rp\u003e\u003c/ruby\u003e！\n\n\u003c/details\u003e\n\n\u003e [Read about romaji romanization systems (for nerds).](https://github.com/sglkc/kuroshiro-ts#romanization-system)\n\n### Korean\n\nLibrary used: [@romanize/korean](https://www.npmjs.com/package/@romanize/korean)\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Hangul System | Revised | Revised, McCune, Yale |\n\n\u003cdetails\u003e\n  \u003csummary\u003eDifferences between each romanization system\u003c/summary\u003e\n  \u003cbr /\u003e\n\n  **Original Text: 우두커니 그 자리에 서서 기다리려나 봐**\n\n  1. Revised ([Revised Romanization of Korean](https://en.wikipedia.org/wiki/Revised_Romanization_of_Korean)): \\\n     udukeoni geu jarie seoseo gidariryeona bwa\n\n  2. McCune ([McCune–Reischauer romanization](https://en.wikipedia.org/wiki/McCune%E2%80%93Reischauer)): \\\n     utuk'ŏni kŭ carie sŏsŏ kitariryŏna pwa\n\n  3. Yale ([Yale romanization of Korean](https://en.wikipedia.org/wiki/Yale_romanization_of_Korean)): \\\n     utukheni ku caliey sese kitalilyena pwa\n\n\u003c/details\u003e\n\n### Cyrillic\n\nLibrary used: [cyrillic-to-translit-js](https://www.npmjs.com/package/cyrillic-to-translit-js)\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Language | Russian | Russian, Ukrainian |\n\n### Chinese\n\nLibrary used: [pinyin-pro](https://www.npmjs.com/package/pinyin-pro)\n\n| Feature | Default | Options |\n|--------|---------|------------------|\n| Ruby text | OFF | ON, OFF |\n\n### Any\n\nLibrary used: [any-ascii](https://github.com/anyascii/anyascii)\n\nProvides a lot of conversions at the cost of accuracy, read more from the package repository.\n\n## Development\n\n### Prerequisites\n\n- Node ^22\n- [pnpm](https://pnpm.io/installation) ^10\n\n  ```sh\n  npm install -g pnpm\n  ```\n\n### Steps\n\nIf you wish to make modifications or just want to build the extension yourself:\n\n1. Clone the repository\n\n  ```sh\n  git clone https://github.com/sglkc/moegi.git\n  cd moegi\n  ```\n\n2. Install dependencies using pnpm\n\n  ```sh\n  pnpm install\n  ```\n\n3. Start extension development and launch test browser\n\n  ```sh\n  pnpm dev\n  ```\n\n3. Build extension\n\n  ```sh\n  pnpm build\n  ```\n\n## Contributing\n\nAny kind of contributions are **greatly appreciated**! You can start by forking this repository then create a pull request.\n\n1. [Fork](https://github.com/sglkc/moegi/fork) the repository\n2. Clone the forked repository to your machine\n3. Create your branch (`git checkout -b feat/new-feature`)\n4. Commit your changes (`git commit -m 'feat: add this and that'`)\n5. Push to the branch (`git push origin feat/new-feature`)\n6. Open a [pull request](https://github.com/sglkc/moegi/pulls)\n\n## Disclaimer\n\nMoegi is not affiliated with Spotify in any way.\nMoegi is for educational purposes only and should not be used to violate Spotify's terms of service.\n\n## Privacy Policy\n\n1. Moegi does not track your listening habits, your IP address, or any other personal information.\n   Everything is done locally in the web browser, except for the translation feature.\n\n2. The translation feature uses Google Translate, which is a third-party service.\n   Google may collect some data about your use of the translation feature, such as the text you translate and the language you translate it to.\n   For more information about Google's privacy policy, please see https://policies.google.com/privacy.\n\n3. Moegi uses a small amount of storage space on your computer to store the options that you have customized and lyrics you have translated.\n   It is not used to store any other personal information.\n\n## License\n\nDistributed under the MIT License. See [LICENSE](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsglkc%2Fmoegi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsglkc%2Fmoegi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsglkc%2Fmoegi/lists"}