Inknarrate guide
Inknarrate turns text into speech inside your browser. Nothing you type is sent anywhere, and after your first visit it works offline. This guide covers setup, everyday use, and fixes for common problems.
Quick start
- Open the app and press Speak. You hear your browser's own voice straight away. It is the default and the fallback, but its audio can't be saved or exported.
- For natural voices that you can also export, press Models (top right). If you're unsure, start with Kokoro: the New here? box at the top points you to its files. Press the Download button next to each of the three files (about 93 MB in all), then drop them into the box.
- Drop the downloaded files into the box at the top of the Models window. When a card says Ready, the app switches to that engine.
- Press Tutorial in the top bar for a one-minute tour (it also shows once on your first visit).
- Type or paste text, press Speak, then press Download WAV. The format (WAV or MP3), subtitles and the per-sentence zip are right under it.
Choosing and adding a voice model
Inknarrate does not host any voice files. The Models window links to the files on Hugging Face (a public site for AI models); you download them in your own browser and add them to the app. They are then kept in this browser's own storage and never uploaded.
| Model | Languages | Size | Good for | Files |
|---|---|---|---|---|
| Kitten TTS (nano) | English, 8 voices | about 28 MB | Small and fast, fine on weak computers. | config.json, kitten_tts_nano_v0_8.onnx, voices.npz |
| Kokoro | English (US and UK) | 92 MB + about 0.5 MB per voice | The most natural English; you choose the voices. | model_quantized.onnx (or model.onnx, 326 MB), tokenizer.json, voices like af_heart.bin |
| Piper | English, Spanish, Arabic | 15 to 110 MB per voice | Many voices in three languages; add as many as you like. | Per voice: name.onnx and name.onnx.json |
Kokoro
Pick one model file: model_quantized.onnx is the one to start with, and model.onnx is better but slower and heavier. Adding the other later replaces the first. Voices must start with af_ or am_ (US) or bf_ or bm_ (UK). Good ones to begin with are Heart, Bella, Emma, Michael and George.
Kitten TTS
Only the "nano" size is supported. Download the three files from the Kitten card and drop them in together.
Piper
Every Piper voice is two files with the same base name, for example en_US-ljspeech-medium.onnx and en_US-ljspeech-medium.onnx.json. Download both. A voice appears in the Voice list once both are added. Some voices contain many speakers; each speaker is listed. You can also use any other English, Spanish or Arabic voice from the Piper voices folder on Hugging Face (open a language folder, then a voice, then a quality: "medium" is a good balance). Each voice has its own licence, so read its MODEL_CARD file before using the audio commercially.
The small config.json and tokenizer.json files are saved for you by their Download buttons. If that doesn't work, a tab opens: press Ctrl+S (Cmd+S on a Mac) and save the file under that exact name.
Spanish and Arabic
Kitten TTS and Kokoro speak English only. They cannot read Arabic, and Spanish text would be read with English rules. If you give them text that is mostly Arabic or another non-Latin script, the app stops and tells you instead of producing nonsense. For Spanish and Arabic, use Piper (or the browser voice).
Spanish and Arabic use Piper voices. The first time you add one, the app downloads extra language data once (about 18 MB, plus 13 MB more for Arabic) and keeps it for offline use. English-only users never download it.
Arabic: write the vowel marks (التشكيل) for the best result
Arabic is normally written without its short vowels, and a voice cannot always guess them. Inknarrate adds the vowel marks automatically before speaking, which sounds good but is not perfect. For the best Arabic, type your text with its vowel marks (التشكيل). Text that already has them is spoken exactly as written. The text box and the sentence list follow the direction of the text, so Arabic reads right to left.
Sentences are split at full stops. Arabic question marks (؟), commas (،) and semicolons (؛) are understood as pauses and as question intonation, but they don't start a new sentence; use the Split at cursor button if you want a break.
The Arabic voice suggested in the Models window (Kareem) has no clearly stated licence for its recordings; the app says so next to it. Check before using its audio commercially.
Writing and generating speech
- Sentences: the text is split into sentences, shown in a list under the box. Only a full stop followed by a space ends a sentence automatically (abbreviations like "Dr." and decimals don't split). A blank line adds a longer pause. You can turn either option off, Split at cursor, and Merge with next.
- Speak (Ctrl+Enter) plays from the top and generates what's missing as it goes; Stop (Esc) stops; Space pauses and resumes. Generate all makes every sentence without playing.
- Every sentence is generated once and kept. Edit a sentence and only that one is generated again. Reloading the page keeps what you made.
- Importing text: press Import or drop a file onto the text box. Supported: .txt, .md, .srt, .vtt, .html, .epub and .docx (up to 50 MB).
- Player: the bar at the bottom has play, previous and next sentence, a seek bar (solid parts are generated), time and volume.
Changing the voice
- Voice, speed and pitch: speed is remembered separately for each engine (Kitten starts at 1.6×, which sounds natural; the others at 1×). Pitch is about ±3 semitones; small changes sound best.
- Blend (Kitten and Kokoro only, experimental) mixes two voices. Piper has no blend.
- Sound: volume boost, bass, treble, even out loudness, trim silence. Pauses: after a sentence and after a paragraph. These apply instantly and regenerate nothing.
- Pronunciation: one rule per line, like
Siobhan = Shiv-awn. - Presets save a voice and its settings under a name.
- Retake (circular arrow on a sentence) generates it again with slightly different delivery. Settings for one sentence (sliders icon) gives a sentence its own voice, speed, pitch and pause.
Exporting and projects
- Recording: all generated sentences joined, as WAV (lossless) or MP3 (64 to 160 kbps).
- Zip per sentence: one numbered audio file per sentence, plus a text list and subtitles.
- Subtitles: SRT or VTT, timed to match the recording.
- Projects: Save project writes a small file with your text and settings (no audio). Open project restores it, and sentences you generated before are found again.
Stored files and deleting them
The Stored in this browser box at the bottom of the Models window lists every model file you added, with its size and a Delete button. Delete all model files removes them all and Clear audio removes the sentences you generated. Your text and settings are never touched, so you never need to clear your whole browser data. Clearing a site's data in your browser settings also removes your models; a different browser or device needs its own copy.
Privacy and offline use
Your text, your audio and your model files stay in your browser. The app contacts another site only when you press Download on config.json or tokenizer.json (it fetches that tiny file from Hugging Face), and when your browser downloads the model files you chose. After your first visit it works offline: add your models before going offline.
Inknarrate needs a recent browser: Chrome, Edge or Brave 102 or newer, Firefox 115 or newer, or Safari 16.4 or newer.
Troubleshooting
- "Not set up yet", or Speak is disabled
- Open Models and add the missing files; the card lists what is missing.
- A file is refused
- Read the message. Common causes: a web page saved instead of the file, a voice for an unsupported language, a different Kitten size, or a
config.jsonfrom the wrong model. Use the Download buttons and check the file size. - “A requested file or directory could not be found” when a model loads
- The browser lost track of a stored file (it can happen after adding files one at a time, or when the disk is nearly full). Reload the page. If it comes back, open Models, remove that file under “Stored in this browser”, and add it again. The app now checks every file right after saving it, so this should be rare.
- A model I added disappeared
- Your browser cleared its storage, or you are in a private window or a different browser. Add the files again.
- Slow, or the page lags while generating
- Set Performance, sentences generated at once, to 1; use Kitten, or Kokoro's smaller model; or a smaller Piper voice.
- Different sound each time I regenerate
- Normal. The models add a little randomness; the words and length stay the same.
- No browser voices listed
- Your system has no voices installed or they are still loading.
- A Spanish or Arabic voice won't load
- It needs the extra language data. Connect to the internet once with that voice added, then try again.
Questions
Is it really free and private?
Yes. It is free, open source software, and your text, audio and model files never leave your browser.
Does it work offline?
Yes, once the app has loaded once and you have added your models.
Which languages are supported?
English with Kitten, Kokoro and Piper; Spanish and Arabic with Piper. The browser voice covers whatever your device has installed.
Can I use the audio commercially?
That depends on the voice model, not on Inknarrate. Each model has its own licence; read the model page before commercial use.
Technical notes
For the curious. The “Technical details” line at the bottom of the app lists each engine’s runtime size, model size and licence. Sizes are what the files weigh on disk; the host compresses text and WebAssembly files in transit, so the real download is smaller. Everything runs in your browser with ONNX Runtime (WebAssembly) in background workers; the page is served with cross-origin isolation headers so that threads can be used. Language data for Spanish and Arabic is only fetched when you add such a voice. After the first visit the app files are kept by a service worker, which is why it works offline.
Licences
Inknarrate is free software under the GNU GPL v3 or later. The source code is here. It bundles eSpeak NG (GPL), onnxruntime-web (MIT), JSZip, an MP3 encoder (LGPL), the Kitten TTS JavaScript port (Apache-2.0), and fonts under the SIL Open Font Licence. Full texts and credits are in the notices file and the licenses folder.
The voice models are separate works, not part of Inknarrate, and are not hosted here. Kitten TTS and Kokoro are Apache-2.0. Piper voices have a licence each (see each voice's model card); the voice Sharvard uses speech data under CC BY 3.0 (credit: University of Edinburgh). Voices you add yourself are your responsibility.
Found a problem? Report it here.