A local browser reading app powered by MOSS-TTS-Nano with in-browser ONNX inference
60
stars
13
commits
JavaScript
primary language
May 7, 2026
updated
MOSS-TTS-Nano Reader is a local browser webpage reading application built on MOSS-TTS-Nano.
Thanks to the efficient performance improvements of the newly released ONNX version of MOSS-TTS-Nano, we can now migrate the whole project and model stack directly into the browser, removing the need to start an extra local service.
Here is a quick usage overview:
MOSS-TTS-Nano-Reader/extension directly as the browser extension.MOSS-TTS-Nano-Reader/extension/models.Load And Prepare to start downloading automatically.
Nano Reader is a lightweight browser reading tool built on top of MOSS-TTS-Nano. It focuses on low-latency local webpage reading with a simple extension + local server workflow.
MOSS-TTS-Nano currently supports 20 languages:
| Language | Code | Flag | Language | Code | Flag | Language | Code | Flag |
|---|---|---|---|---|---|---|---|---|
| Chinese | zh | 🇨🇳 | English | en | 🇺🇸 | German | de | 🇩🇪 |
| Spanish | es | 🇪🇸 | French | fr | 🇫🇷 | Japanese | ja | 🇯🇵 |
| Italian | it | 🇮🇹 | Hungarian | hu | 🇭🇺 | Korean | ko | 🇰🇷 |
| Russian | ru | 🇷🇺 | Persian (Farsi) | fa | 🇮🇷 | Arabic | ar | 🇸🇦 |
| Polish | pl | 🇵🇱 | Portuguese | pt | 🇵🇹 | Czech | cs | 🇨🇿 |
| Danish | da | 🇩🇰 | Swedish | sv | 🇸🇪 | Greek | el | 🇬🇷 |
| Turkish | tr | 🇹🇷 |
The recommended workflow is: start a local Nano Reader inference service first, either with reader-app or the command-line service, and then use the browser extension directly for webpage playback. We also plan to provide ready-to-use packaged builds through Releases so they can work out of the box together with the browser extension.
Nano Reader now tracks MOSS-TTS-Nano as a git submodule.
For a fresh clone of this repository, clone it with submodules:
git clone --recurse-submodules https://github.com/OpenMOSS/MOSS-TTS-Nano-Reader.git
If you already cloned Nano Reader without submodules, initialize and fetch them with:
cd MOSS-TTS-Nano-Reader
git submodule update --init --recursive
We recommend a clean Python environment first, then installing the Nano Reader server dependencies locally. The default release layout expects the repository checkout and model snapshots to live inside the MOSS-TTS-Nano-Reader root.
Use this if you want the shortest setup path.
cd MOSS-TTS-Nano-Reader
conda env create -f environment.yml
conda activate nano-reader
This single command installs:
./serverpyniniWeTextProcessingIf you later update environment.yml, refresh the environment with:
cd MOSS-TTS-Nano-Reader
conda env update -f environment.yml --prune
Use this if you prefer to install each dependency manually or need to troubleshoot one part at a time.
conda create -n nano-reader python=3.12 -y
conda activate nano-reader
cd MOSS-TTS-Nano-Reader/server
pip install -e .
If WeTextProcessing is needed for the popup normalization switches and fails to install directly, install its extra dependencies in the same environment:
conda install -c conda-forge pynini=2.1.6.post1 -y
pip install git+https://github.com/WhizZest/WeTextProcessing.git
Nano Reader defaults to the following fixed layout:
MOSS-TTS-Nano-Reader/MOSS-TTS-NanoMOSS-TTS-Nano-Reader/models/MOSS-TTS-NanoMOSS-TTS-Nano-Reader/models/MOSS-Audio-Tokenizer-NanoDownload model weights from Hugging Face into the default local directories:
mkdir -p models
huggingface-cli download OpenMOSS-Team/MOSS-TTS-Nano --local-dir models/MOSS-TTS-Nano
huggingface-cli download OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano --local-dir models/MOSS-Audio-Tokenizer-Nano
If you prefer custom paths, you can still override the defaults with CLI arguments or environment variables when starting the server.
Use reader-app if you want a desktop window to start and manage the local service:
cd MOSS-TTS-Nano-Reader
python reader-app/main.py
The current reader-app can:
Server PortCheckpoint Path and Audio Tokenizer Path to load models from specific pathsA packaged reader-app build for supported platforms can be downloaded from Releases. Reader App automatically downloads model weights to the default paths.
If you use a non-default port in reader-app, update the same host and port in the extension popup under Server Connection.
Use this mode if you prefer to run the local Flask server directly from the command line:
cd MOSS-TTS-Nano-Reader/server
python server.py
By default, the server will:
../MOSS-TTS-Nano../models/MOSS-TTS-Nano../models/MOSS-Audio-Tokenizer-Nanohttp://localhost:5050Use a different port:
python server.py --port 6060
Equivalent environment-variable launch:
export NANO_TTS_PORT=6060
python server.py
Important:
http://localhost:5050 by defaultServer Connection, set the same host and port, then click ApplyOptional custom-path launch:
python server.py \
--nano-tts-repo-path /path/to/MOSS-TTS-Nano \
--checkpoint-path /path/to/models/MOSS-TTS-Nano \
--audio-tokenizer-path /path/to/models/MOSS-Audio-Tokenizer-Nano \
Equivalent environment-variable launch for custom model paths:
export NANO_TTS_REPO_PATH=/path/to/MOSS-TTS-Nano
export NANO_TTS_CHECKPOINT_PATH=/path/to/models/MOSS-TTS-Nano
export NANO_TTS_AUDIO_TOKENIZER_PATH=/path/to/models/MOSS-Audio-Tokenizer-Nano
python server.py
chrome://extensions/Developer modeLoad unpackedMOSS-TTS-Nano-Reader/extension folderserver.py or reader-app is already runningScan to extract readable paragraphsStart fromServer Connection and confirm the host and port match the running local serviceEnable WeTextProcessing and Enable normalize_tts_text enabled unless you explicitly want raw textRead Page/health, for example http://localhost:5050/health by default.Realtime Streaming Decode is enabled by default for low-latency playback. If you turn it off, the extension waits until the full audio segment is generated before playback starts.CPU Threads, or close other CPU-heavy programs.Initial Playback Delay (s) controls how long the player waits before starting the first audio frame. A slightly larger value lets the model generate more audio before playback begins.Enable WeTextProcessing enables WeTextProcessing-based text normalization. If some symbols are spoken in an unexpected way, try turning it off.Add Voice to add custom voices. Added voices remain in the selector until you remove their entries from assets/voice_browser_metadata.json.This repository will follow the license specified in the root LICENSE file. If you are reading this before that file is published, please treat the repository as not yet licensed for redistribution.
If you use the MOSS-TTS work in your research or product, please cite:
@misc{openmoss2026mossttsnano,
title={MOSS-TTS-Nano},
author={OpenMOSS Team},
year={2026},
howpublished={GitHub repository},
url={https://github.com/OpenMOSS/MOSS-TTS-Nano}
}
@misc{gong2026mossttstechnicalreport,
title={MOSS-TTS Technical Report},
author={Yitian Gong and Botian Jiang and Yiwei Zhao and Yucheng Yuan and Kuangwei Chen and Yaozhou Jiang and Cheng Chang and Dong Hong and Mingshu Chen and Ruixiao Li and Yiyang Zhang and Yang Gao and Hanfu Chen and Ke Chen and Songlin Wang and Xiaogui Yang and Yuqian Zhang and Kexin Huang and ZhengYuan Lin and Kang Yu and Ziqi Chen and Jin Wang and Zhaoye Fei and Qinyuan Cheng and Shimin Li and Xipeng Qiu},
year={2026},
eprint={2603.18090},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2603.18090}
}
@misc{gong2026mossaudiotokenizerscalingaudiotokenizers,
title={MOSS-Audio-Tokenizer: Scaling Audio Tokenizers for Future Audio Foundation Models},
author={Yitian Gong and Kuangwei Chen and Zhaoye Fei and Xiaogui Yang and Ke Chen and Yang Wang and Kexin Huang and Mingshu Chen and Ruixiao Li and Qingyuan Cheng and Shimin Li and Xipeng Qiu},
year={2026},
eprint={2602.10934},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2602.10934}
}
12 commits
1 commits
JavaScript
91.8%
Python
5.5%
HTML
1.7%
A local browser reading app powered by MOSS-TTS-Nano with in-browser ONNX inference
60
stars
13
commits
JavaScript
primary language
May 7, 2026
updated
MOSS-TTS-Nano Reader is a local browser webpage reading application built on MOSS-TTS-Nano.
Thanks to the efficient performance improvements of the newly released ONNX version of MOSS-TTS-Nano, we can now migrate the whole project and model stack directly into the browser, removing the need to start an extra local service.
Here is a quick usage overview:
MOSS-TTS-Nano-Reader/extension directly as the browser extension.MOSS-TTS-Nano-Reader/extension/models.Load And Prepare to start downloading automatically.
Nano Reader is a lightweight browser reading tool built on top of MOSS-TTS-Nano. It focuses on low-latency local webpage reading with a simple extension + local server workflow.
MOSS-TTS-Nano currently supports 20 languages:
| Language | Code | Flag | Language | Code | Flag | Language | Code | Flag |
|---|---|---|---|---|---|---|---|---|
| Chinese | zh | 🇨🇳 | English | en | 🇺🇸 | German | de | 🇩🇪 |
| Spanish | es | 🇪🇸 | French | fr | 🇫🇷 | Japanese | ja | 🇯🇵 |
| Italian | it | 🇮🇹 | Hungarian | hu | 🇭🇺 | Korean | ko | 🇰🇷 |
| Russian | ru | 🇷🇺 | Persian (Farsi) | fa | 🇮🇷 | Arabic | ar | 🇸🇦 |
| Polish | pl | 🇵🇱 | Portuguese | pt | 🇵🇹 | Czech | cs | 🇨🇿 |
| Danish | da | 🇩🇰 | Swedish | sv | 🇸🇪 | Greek | el | 🇬🇷 |
| Turkish | tr | 🇹🇷 |
The recommended workflow is: start a local Nano Reader inference service first, either with reader-app or the command-line service, and then use the browser extension directly for webpage playback. We also plan to provide ready-to-use packaged builds through Releases so they can work out of the box together with the browser extension.
Nano Reader now tracks MOSS-TTS-Nano as a git submodule.
For a fresh clone of this repository, clone it with submodules:
git clone --recurse-submodules https://github.com/OpenMOSS/MOSS-TTS-Nano-Reader.git
If you already cloned Nano Reader without submodules, initialize and fetch them with:
cd MOSS-TTS-Nano-Reader
git submodule update --init --recursive
We recommend a clean Python environment first, then installing the Nano Reader server dependencies locally. The default release layout expects the repository checkout and model snapshots to live inside the MOSS-TTS-Nano-Reader root.
Use this if you want the shortest setup path.
cd MOSS-TTS-Nano-Reader
conda env create -f environment.yml
conda activate nano-reader
This single command installs:
./serverpyniniWeTextProcessingIf you later update environment.yml, refresh the environment with:
cd MOSS-TTS-Nano-Reader
conda env update -f environment.yml --prune
Use this if you prefer to install each dependency manually or need to troubleshoot one part at a time.
conda create -n nano-reader python=3.12 -y
conda activate nano-reader
cd MOSS-TTS-Nano-Reader/server
pip install -e .
If WeTextProcessing is needed for the popup normalization switches and fails to install directly, install its extra dependencies in the same environment:
conda install -c conda-forge pynini=2.1.6.post1 -y
pip install git+https://github.com/WhizZest/WeTextProcessing.git
Nano Reader defaults to the following fixed layout:
MOSS-TTS-Nano-Reader/MOSS-TTS-NanoMOSS-TTS-Nano-Reader/models/MOSS-TTS-NanoMOSS-TTS-Nano-Reader/models/MOSS-Audio-Tokenizer-NanoDownload model weights from Hugging Face into the default local directories:
mkdir -p models
huggingface-cli download OpenMOSS-Team/MOSS-TTS-Nano --local-dir models/MOSS-TTS-Nano
huggingface-cli download OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano --local-dir models/MOSS-Audio-Tokenizer-Nano
If you prefer custom paths, you can still override the defaults with CLI arguments or environment variables when starting the server.
Use reader-app if you want a desktop window to start and manage the local service:
cd MOSS-TTS-Nano-Reader
python reader-app/main.py
The current reader-app can:
Server PortCheckpoint Path and Audio Tokenizer Path to load models from specific pathsA packaged reader-app build for supported platforms can be downloaded from Releases. Reader App automatically downloads model weights to the default paths.
If you use a non-default port in reader-app, update the same host and port in the extension popup under Server Connection.
Use this mode if you prefer to run the local Flask server directly from the command line:
cd MOSS-TTS-Nano-Reader/server
python server.py
By default, the server will:
../MOSS-TTS-Nano../models/MOSS-TTS-Nano../models/MOSS-Audio-Tokenizer-Nanohttp://localhost:5050Use a different port:
python server.py --port 6060
Equivalent environment-variable launch:
export NANO_TTS_PORT=6060
python server.py
Important:
http://localhost:5050 by defaultServer Connection, set the same host and port, then click ApplyOptional custom-path launch:
python server.py \
--nano-tts-repo-path /path/to/MOSS-TTS-Nano \
--checkpoint-path /path/to/models/MOSS-TTS-Nano \
--audio-tokenizer-path /path/to/models/MOSS-Audio-Tokenizer-Nano \
Equivalent environment-variable launch for custom model paths:
export NANO_TTS_REPO_PATH=/path/to/MOSS-TTS-Nano
export NANO_TTS_CHECKPOINT_PATH=/path/to/models/MOSS-TTS-Nano
export NANO_TTS_AUDIO_TOKENIZER_PATH=/path/to/models/MOSS-Audio-Tokenizer-Nano
python server.py
chrome://extensions/Developer modeLoad unpackedMOSS-TTS-Nano-Reader/extension folderserver.py or reader-app is already runningScan to extract readable paragraphsStart fromServer Connection and confirm the host and port match the running local serviceEnable WeTextProcessing and Enable normalize_tts_text enabled unless you explicitly want raw textRead Page/health, for example http://localhost:5050/health by default.Realtime Streaming Decode is enabled by default for low-latency playback. If you turn it off, the extension waits until the full audio segment is generated before playback starts.CPU Threads, or close other CPU-heavy programs.Initial Playback Delay (s) controls how long the player waits before starting the first audio frame. A slightly larger value lets the model generate more audio before playback begins.Enable WeTextProcessing enables WeTextProcessing-based text normalization. If some symbols are spoken in an unexpected way, try turning it off.Add Voice to add custom voices. Added voices remain in the selector until you remove their entries from assets/voice_browser_metadata.json.This repository will follow the license specified in the root LICENSE file. If you are reading this before that file is published, please treat the repository as not yet licensed for redistribution.
If you use the MOSS-TTS work in your research or product, please cite:
@misc{openmoss2026mossttsnano,
title={MOSS-TTS-Nano},
author={OpenMOSS Team},
year={2026},
howpublished={GitHub repository},
url={https://github.com/OpenMOSS/MOSS-TTS-Nano}
}
@misc{gong2026mossttstechnicalreport,
title={MOSS-TTS Technical Report},
author={Yitian Gong and Botian Jiang and Yiwei Zhao and Yucheng Yuan and Kuangwei Chen and Yaozhou Jiang and Cheng Chang and Dong Hong and Mingshu Chen and Ruixiao Li and Yiyang Zhang and Yang Gao and Hanfu Chen and Ke Chen and Songlin Wang and Xiaogui Yang and Yuqian Zhang and Kexin Huang and ZhengYuan Lin and Kang Yu and Ziqi Chen and Jin Wang and Zhaoye Fei and Qinyuan Cheng and Shimin Li and Xipeng Qiu},
year={2026},
eprint={2603.18090},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2603.18090}
}
@misc{gong2026mossaudiotokenizerscalingaudiotokenizers,
title={MOSS-Audio-Tokenizer: Scaling Audio Tokenizers for Future Audio Foundation Models},
author={Yitian Gong and Kuangwei Chen and Zhaoye Fei and Xiaogui Yang and Ke Chen and Yang Wang and Kexin Huang and Mingshu Chen and Ruixiao Li and Qingyuan Cheng and Shimin Li and Xipeng Qiu},
year={2026},
eprint={2602.10934},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2602.10934}
}
12 commits
1 commits
JavaScript
91.8%
Python
5.5%
HTML
1.7%