Ruby
gem 'secryst'
Pure-Ruby inference via ONNX; the original crystal, born here in 2020. The modernized v1 line rides PR #47.
github.com/secryst/secryst
secryst
n. coined from scrying + crystal — to gaze into an opaque script and see its hidden reading.
The vowels, phonemes, and word boundaries live in the reader’s mind — not on the page. Secryst is a family of local, deterministic runtimes that make a text speak: vocalization, diacritization, grapheme-to-phoneme. No cloud, no LLM, no telemetry.
قدر
قَدَر
qadar — fate, measure
ספר
סֵפֶר
sefer — book
ភាសា
pheasaea
language
The scrying stone
Scrying is divination by gazing into an opaque medium — a crystal — to see what is concealed. Undiacritized Arabic, nikud-less Hebrew, unvocalized Khmer, unsegmented Thai are exactly such surfaces: the reading exists, the glyphs withhold it. Secryst holds the polished stone to the page.
The crystal is an ONNX model you hold in your hand: sha256-verified on load, cached locally, run in-process. Ruby, Python, and TypeScript crystals implement one contract and are diffed against each other on shared golden sets.
The crystal family
gem 'secryst'
Pure-Ruby inference via ONNX; the original crystal, born here in 2020. The modernized v1 line rides PR #47.
github.com/secryst/secryst
pip install secryst
The reference crystal: it generates the golden sets the others are diffed against. Byte-level ByT5 inference, IMF v1 loading, verified cache.
github.com/secryst/secryst-py
npm i @secryst/ml onnxruntime-node
Node crystal for the interscript-js ecosystem; onnxruntime-node stays an optional peer so index consumers stay light.
github.com/secryst/secryst-ts
The contract
Standards get descriptive names; crystals get evocative ones. The interscript-ml contract defines what a hidden reading is — the models.yaml index, the IMF v1 model-zip format (member sha256s verified on load), and the golden sets. Every crystal resolves the same ids, verifies the same checksums, and must reproduce the same outputs.
models.yaml · IMF v1 · golden sets
┌──────────────────────────────────────┐
│ the interscript-ml contract │
└──────┬───────────┬───────────┬───────┘
│ │ │
gem secryst pip secryst @secryst/ml
(Ruby) (Python) (TypeScript)
Environment: SECRYST_INDEX (index URL or path) and SECRYST_CACHE (default ~/.cache/secryst). Cache hits are re-verified — a corrupt file never loads silently.
In the index
| id | what it reveals |
|---|---|
khm-latn-1.0 | Khmer text → Latin reading |
tha-g2p-base | Thai → IPA phonemes |
tha-g2p-small | Thai → IPA phonemes (compact) |
heb-diac | Hebrew consonants → full nikud |
urd-diac | Urdu → vocalized Urdu |
urd-g2p | Urdu → phonemes |
Model ids resolve through the models.yaml index; more families (Arabic diacritization, Persian G2P) are in release preparation.
Relation
Interscript defines interoperable transliteration maps. But maps assume vocalized input: undiacritized text cannot be transliterated unambiguously. Secryst is the phonological layer underneath — independent (a crystal serves any TTS or G2P use with zero interscript dependency), related by contract, diffed on goldens.
Interscript defines what a hidden reading is.
Secryst is how you reveal it, in-process.