About

To gaze into an opaque script and see its hidden reading.

The name

secryst is coined from scrying + crystal. Scrying is the old word for gazing into a crystal ball to see what is hidden; secryst is a family of crystals — small runtime gems and packages — that gaze into opaque scripts and reveal their hidden readings.

What secryst is

Secryst is a family of runtimes that recover linguistic information a writing system withholds: the short vowels of written Arabic, the nikud of unpointed Hebrew, the phonemes behind Khmer and Thai orthography. It does this with byte-level sequence-to-sequence models (the ByT5 family, exported to ONNX) running in-process — no cloud, no LLM, no telemetry.

Every artifact is a zip you can hash, inspect, and pin, resolved through a single versioned models.yaml index implementing the interscript-ml contract v1. Same input, same model version, same output — forever. The primer walks through the problem and the approach in depth.

The crystal family

Three implementations of one contract with identical behavior — the crystal reference carries the API details:

CrystalPackageBorn
Rubygem 'secryst' — the original: a seq2seq transformer gem first cut in 20202020
Pythonpip install secryst — the reference: generates the golden sets the others are diffed againstthe v1 line
TypeScriptnpm i secryst — the embeddable one for the interscript-js ecosystemthe v1 line

Teachers are trained in secryst-train; distilled students that pass the export gate are published into the interscript-ml zoo. The model catalogue lists every id with its measured quality.

Relation to Interscript

Interscript publishes deterministic transliteration maps — but maps assume vocalized input; undiacritized text cannot be transliterated unambiguously. Secryst is the phonological layer underneath: maps that need it declare a vocalization step and dispatch to the host runtime’s crystal. The crystals themselves have no interscript dependency — related by contract, not by captivity.

Principles

  • Local & deterministic — no network at inference; artifacts download once, sha256-verified, then load from cache; every cache hit re-verifies.
  • Never LLMs as teachers — large language models hallucinate vocalization; a single systematic hallucination distilled into a student becomes a permanent error. Every label is gold human text or deterministic rule output.
  • Parity over promises — the reference crystal generates golden sets; the others must reproduce them byte-for-byte in CI before any release. A model that behaves differently across runtimes never ships.

License & source

BSD-3-Clause / MIT per repository, all source on GitHub under the secryst organization. Issues and pull requests are welcome.