Repository navigation
Ito now speaks English text on the chip. Give the ESP32-S3 a line of text (text Good morning! on its serial console, or a phrase list stored in flash) and it normalizes it, phonemizes it with a port of espeak-ng 1.52.0 and synthesizes it, with no computer in the loop. esp32/tools/say.py (phonemize on a computer, send ids) still works as the host alternative.
Measured on silicon (one ESP32-S3-DevKitC-1 N16R8 rev v0.2, 4 and 5 November 2026, a different board from the v1.0.0 measurements; female voice, full split, int4 set; details and commands in esp32/FRONTEND.md, table in esp32/README.md section 4d)
- Token ids from the chip equal the Python front end's for 2004 of 2004 texts; the chip's PCM equals the host C engine's for 1661 of 1661 utterances.
- Front end alone: median 6.8 ms, p99 36 ms, max 58.5 ms per utterance.
- Text -> first 125 ms audio chunk computed: median 188.8 ms, max 199.2 ms over 36 texts of 5 to 247 words (183 ms median for 500 short texts); row-split fallback 240 to 250 ms. Long first sentences (over about 20 words) take 203 to 285 ms.
- Stand-alone run with nothing on the serial port: 240 unseen texts, 748 utterances, 5448 s of audio, all ids and PCM identical to the host, 0 underruns, RTF 0.654. 20-boot reset loop and 1200 hostile inputs: no crash, hang or leak.
Not measured / caveats: no DAC, amplifier or I2S output was used and nothing was listened to (the timings are "audio computed", not "audio heard"); one board, powered over USB from a Mac, so no battery run, no cold power-up from zero volts and no true unplug; female voice only for the text path; English (en-us) only; one line of at most 4 KB per text, utterances limited to 2400 bytes and 400 tokens. Please send us your boot log and numbers.
What is in this release
ito_app_frontend_merged.bin: the prebuilt firmware with the on-chip front end (1,013,744 bytes, ESP-IDF 5.5.1), flash at 0x0. This is now the default ofesp32/tools/flash.sh. No model weights: the weights come from the gated Hugging Face repository and go to 0x200000 / 0x680000 / 0xB00000 (esp32/tools/fetch_weights.sh,flash.sh). The olderito_app_merged.binof v1.0.0 (phoneme ids only) remains inesp32/prebuilt/and on the v1.0.0 release.- New partitions
texts(0xF80000) andresults(0xFA0000) for the stand-alone test mode (CONFIG_ITOFS_AUTOTEST, not in the prebuilt); the weight offsets are unchanged. - sha256 of
ito_app_frontend_merged.bin:9ef9553900aaaeadb522dfe41fc2816aecf2ac41cf9c2a35eb76a40c41f19eff
Licence
- Code: GPLv3. The on-chip front end contains espeak-ng 1.52.0 and ucd-tools (GPLv3 or later, by their own authors; see
NOTICE,esp32/frontend/espeak/COPYING,PORT.md), which Lokutor cannot relicense; a commercial firmware leaves it out (CONFIG_ITOFS_FRONTEND=n) or complies with the GPL for that part. - Weights: CC BY-NC-SA 4.0 plus terms (non-commercial), gated download at https://huggingface.co/lokutor-ai/ito. Free for hobby, research and education; contact@lokutor.com for commercial use.
Listen: https://lokutor-ai.github.io/ito/ . Limits as in v1.0.0: English only, two voices, listening-test results from a single listener who is an author, no independent reproduction yet; a paper is in preparation and not yet published.