MOSS-TTS-Nano Reader is a local browser webpage reading application built on MOSS-TTS-Nano.
- 2026.4.14: We release Nano Reader, a browser-focused local reading integration on top of MOSS-TTS-Nano.
- 2026.4.10: We release MOSS-TTS-Nano. A demo Space is available at OpenMOSS-Team/MOSS-TTS-Nano. You can also view the demo and more details at openmoss.github.io/MOSS-TTS-Nano-Demo/.
- Online Demo: https://openmoss.github.io/MOSS-TTS-Nano-Demo/
- Hugging Face Space: OpenMOSS-Team/MOSS-TTS-Nano
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.
- Ultra-low-latency webpage reading
- Pure CPU inference
- Chrome / Edge extension support
- Freely add custom voices
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.gitIf you already cloned Nano Reader without submodules, initialize and fetch them with:
cd MOSS-TTS-Nano-Reader
git submodule update --init --recursiveWe 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-readerThis single command installs:
- the editable local server package from
./server pyniniWeTextProcessing
If you later update environment.yml, refresh the environment with:
cd MOSS-TTS-Nano-Reader
conda env update -f environment.yml --pruneUse 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.gitNano Reader defaults to the following fixed layout:
- Nano-TTS repo:
MOSS-TTS-Nano-Reader/MOSS-TTS-Nano - Checkpoint:
MOSS-TTS-Nano-Reader/models/MOSS-TTS-Nano - Audio tokenizer:
MOSS-TTS-Nano-Reader/models/MOSS-Audio-Tokenizer-Nano
Download 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-NanoIf 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.pyThe current reader-app can:
- start, stop, and restart the local server
- show live startup and runtime logs
- change
Server Port - set
Checkpoint PathandAudio Tokenizer Pathto load models from specific paths
A 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.pyBy default, the server will:
- load
../MOSS-TTS-Nano - load
../models/MOSS-TTS-Nano - load
../models/MOSS-Audio-Tokenizer-Nano - run in CPU-only mode
- listen on
http://localhost:5050 - exit early with a clear error if the default repo or model directories are missing
Use a different port:
python server.py --port 6060Equivalent environment-variable launch:
export NANO_TTS_PORT=6060
python server.pyImportant:
- The browser extension uses
http://localhost:5050by default - If you change the port, open the extension popup, expand
Server Connection, set the same host and port, then clickApply
Optional 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- Open Chrome and go to
chrome://extensions/ - Enable
Developer mode - Click
Load unpacked - Select the
MOSS-TTS-Nano-Reader/extensionfolder
- Make sure
server.pyorreader-appis already running - Open a webpage you want to read
- Click the Nano Reader extension icon
- Click
Scanto extract readable paragraphs - Choose the start paragraph from
Start from - Select a voice from the popup
- If needed, expand
Server Connectionand confirm the host and port match the running local service - Keep
Enable WeTextProcessingandEnable normalize_tts_textenabled unless you explicitly want raw text - Click
Read Page
- After the server starts, you can check whether it is ready through
/health, for examplehttp://localhost:5050/healthby default. Realtime Streaming Decodeis 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.- If playback feels choppy, try increasing
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 WeTextProcessingenables WeTextProcessing-based text normalization. If some symbols are spoken in an unexpected way, try turning it off.- You can use
Add Voiceto add custom voices. Added voices remain in the selector until you remove their entries fromassets/voice_browser_metadata.json.
- Nano Reader is built on top of MOSS-TTS-Nano and MOSS-Audio-Tokenizer-Nano from the OpenMOSS team.
- The browser-reader skeleton and original interaction flow were adapted from lukasmwerner/pocket-reader. We thank the original author for open-sourcing that project structure.
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}
}


