From 0a1dc5750cc4088731bf58bcfa693ba7601742c7 Mon Sep 17 00:00:00 2001 From: Joshua Lochner Date: Thu, 16 Jan 2025 19:50:34 +0200 Subject: [PATCH] Create Kokoro TTS JavaScript library (#3) * Set up JS project * Finalise JS library * Update README * Fix package.json repository url * Rename package -> `kokoro-js` * Fix samples in README * Cleanup README * Bump `phonemizer` version * Create web demo * Run prettier * Link to model used in demo * Enable multithreading in HF space demo (~40% faster) * Add link to demo in README * Bump to v1.0.1 --- kokoro.js/.gitignore | 4 + kokoro.js/.prettierignore | 2 + kokoro.js/README.md | 55 + kokoro.js/demo/.gitignore | 24 + kokoro.js/demo/README.md | 59 + kokoro.js/demo/eslint.config.js | 35 + kokoro.js/demo/index.html | 13 + kokoro.js/demo/package-lock.json | 4680 +++++++++++++++++++++++++++++ kokoro.js/demo/package.json | 33 + kokoro.js/demo/postcss.config.js | 6 + kokoro.js/demo/public/hf-logo.svg | 8 + kokoro.js/demo/public/wave.svg | 9 + kokoro.js/demo/src/App.jsx | 144 + kokoro.js/demo/src/index.css | 100 + kokoro.js/demo/src/main.jsx | 10 + kokoro.js/demo/src/worker.js | 20 + kokoro.js/demo/tailwind.config.js | 8 + kokoro.js/demo/vite.config.js | 12 + kokoro.js/package-lock.json | 2972 ++++++++++++++++++ kokoro.js/package.json | 65 + kokoro.js/rollup.config.js | 42 + kokoro.js/src/kokoro.js | 90 + kokoro.js/src/phonemize.js | 197 ++ kokoro.js/src/voices.js | 121 + kokoro.js/tests/phonemize.test.js | 95 + kokoro.js/tsconfig.json | 16 + kokoro.js/voices/af.bin | Bin 0 -> 524288 bytes kokoro.js/voices/af_bella.bin | Bin 0 -> 524288 bytes kokoro.js/voices/af_nicole.bin | Bin 0 -> 524288 bytes kokoro.js/voices/af_sarah.bin | Bin 0 -> 524288 bytes kokoro.js/voices/af_sky.bin | Bin 0 -> 524288 bytes kokoro.js/voices/am_adam.bin | Bin 0 -> 524288 bytes kokoro.js/voices/am_michael.bin | Bin 0 -> 524288 bytes kokoro.js/voices/bf_emma.bin | Bin 0 -> 524288 bytes kokoro.js/voices/bf_isabella.bin | Bin 0 -> 524288 bytes kokoro.js/voices/bm_george.bin | Bin 0 -> 524288 bytes kokoro.js/voices/bm_lewis.bin | Bin 0 -> 524288 bytes 37 files changed, 8820 insertions(+) create mode 100644 kokoro.js/.gitignore create mode 100644 kokoro.js/.prettierignore create mode 100644 kokoro.js/README.md create mode 100644 kokoro.js/demo/.gitignore create mode 100644 kokoro.js/demo/README.md create mode 100644 kokoro.js/demo/eslint.config.js create mode 100644 kokoro.js/demo/index.html create mode 100644 kokoro.js/demo/package-lock.json create mode 100644 kokoro.js/demo/package.json create mode 100644 kokoro.js/demo/postcss.config.js create mode 100644 kokoro.js/demo/public/hf-logo.svg create mode 100644 kokoro.js/demo/public/wave.svg create mode 100644 kokoro.js/demo/src/App.jsx create mode 100644 kokoro.js/demo/src/index.css create mode 100644 kokoro.js/demo/src/main.jsx create mode 100644 kokoro.js/demo/src/worker.js create mode 100644 kokoro.js/demo/tailwind.config.js create mode 100644 kokoro.js/demo/vite.config.js create mode 100644 kokoro.js/package-lock.json create mode 100644 kokoro.js/package.json create mode 100644 kokoro.js/rollup.config.js create mode 100644 kokoro.js/src/kokoro.js create mode 100644 kokoro.js/src/phonemize.js create mode 100644 kokoro.js/src/voices.js create mode 100644 kokoro.js/tests/phonemize.test.js create mode 100644 kokoro.js/tsconfig.json create mode 100644 kokoro.js/voices/af.bin create mode 100644 kokoro.js/voices/af_bella.bin create mode 100644 kokoro.js/voices/af_nicole.bin create mode 100644 kokoro.js/voices/af_sarah.bin create mode 100644 kokoro.js/voices/af_sky.bin create mode 100644 kokoro.js/voices/am_adam.bin create mode 100644 kokoro.js/voices/am_michael.bin create mode 100644 kokoro.js/voices/bf_emma.bin create mode 100644 kokoro.js/voices/bf_isabella.bin create mode 100644 kokoro.js/voices/bm_george.bin create mode 100644 kokoro.js/voices/bm_lewis.bin diff --git a/kokoro.js/.gitignore b/kokoro.js/.gitignore new file mode 100644 index 0000000..76da710 --- /dev/null +++ b/kokoro.js/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist +types +LICENSE diff --git a/kokoro.js/.prettierignore b/kokoro.js/.prettierignore new file mode 100644 index 0000000..7998256 --- /dev/null +++ b/kokoro.js/.prettierignore @@ -0,0 +1,2 @@ +dist +types diff --git a/kokoro.js/README.md b/kokoro.js/README.md new file mode 100644 index 0000000..61a76ab --- /dev/null +++ b/kokoro.js/README.md @@ -0,0 +1,55 @@ +# Kokoro TTS + +

+ NPM + NPM Downloads + jsDelivr Hits + License + Demo +

+ +Kokoro is a frontier TTS model for its size of 82 million parameters (text in/audio out). This JavaScript library allows the model to be run 100% locally in the browser thanks to [🤗 Transformers.js](https://huggingface.co/docs/transformers.js). Try it out using our [online demo](https://huggingface.co/spaces/webml-community/kokoro-web)! + +## Usage + +First, install the `kokoro-js` library from [NPM](https://npmjs.com/package/kokoro-js) using: + +```bash +npm i kokoro-js +``` + +You can then generate speech as follows: + +```js +import { KokoroTTS } from "kokoro-js"; + +const model_id = "onnx-community/Kokoro-82M-ONNX"; +const tts = await KokoroTTS.from_pretrained(model_id, { + dtype: "q8", // Options: "fp32", "fp16", "q8", "q4", "q4f16" +}); + +const text = "Life is like a box of chocolates. You never know what you're gonna get."; +const audio = await tts.generate(text, { + // Use `tts.list_voices()` to list all available voices + voice: "af_bella", +}); +audio.save("audio.wav"); +``` + +## Voices/Samples + +> Life is like a box of chocolates. You never know what you're gonna get. + +| Voice | Nationality | Gender | Sample | +| ------------------------ | ----------- | ------ | -------------------------------------------------------------------------------------------------------- | +| Default (`af`) | American | Female |