Neural phonology · local & deterministic

Reveal the hidden reading of a script.

The vowels, phonemes, and word boundaries live in the reader’s mind — not on the page. Secryst runs byte-level seq2seq models (ONNX) in-process to recover them: diacritization, vocalization, grapheme-to-phoneme. No cloud, no LLM, no telemetry.

One task, three names

Every secryst model recovers information the writing system withholds. What it’s called depends on the script.

Diacritization

قدر قَدَر Arabic · qadar, “fate”

Restore the short vowels (ḥarakāt) omitted by the Arabic script, including word-final case endings.

Vocalization

ספר סֵפֶר Hebrew · sefer, “book”

Restore nikud for Hebrew, with cantillation marks passed through untouched.

Phonemization (G2P)

ភាសា pheasaea Khmer · “language”

Map graphemes to phonemes for scripts whose orthography encodes the sound only implicitly.

Built like infrastructure, not a demo

Three language-identical implementations of one versioned contract, kept honest by shared test vectors.

contract

interscript-ml v1

A versioned models.yaml index and the IMF v1 model-zip format: every artifact sha256-verified on every load. Standards get descriptive names; implementations get evocative ones.

parity

Golden-set diffing

The Python crystal generates golden outputs; Ruby and TypeScript must reproduce them byte-for-byte in CI. A model that behaves differently across runtimes never ships.

independence

Zero lock-in

BSD-licensed crystals with no interscript dependency — usable standalone for TTS front-ends, text normalization, or any G2P need. Related to Interscript by contract, not by captivity.

Start in your language

Model ids resolve through the index; artifacts download once, verify, and cache. Overrides: SECRYST_INDEX, SECRYST_CACHE.

Ruby

gem 'secryst'

t = Secryst::Translator.new(
  model_file: 'khm-latn-byt5.zip')
t.translate('ភាសា')  # => "pheasaea"
Crystal reference →

Python

pip install secryst

from secryst import Model
m = Model.load('khm-latn-1.0')
m.translate('ភាសា')  # => "pheasaea"

TypeScript

npm i secryst onnxruntime-node

import { load } from 'secryst'
const m = await load('khm-latn-1.0')
await m.translate('ភាសា')