Under the hood
A tiny local decision path
No translation service and no generative model. Upyr remaps the exact physical keys, then asks whether the other-layout candidate is clearly more plausible.
-
01
Capture positions
The native hook keeps a bounded in-memory prefix for the current input boundary.
-
02
Remap keys
Installed EN and UK input sources produce the opposite-layout candidate, case and punctuation included.
-
03
Score evidence
Dictionaries, technical guards, exceptions, and the signed character n-gram index compare both readings.
-
04
Apply carefully
Only a candidate above the selected confidence threshold replaces text and switches the input source.
Character patterns, packed small
Equal-size English and Ukrainian news corpora are filtered by alphabet and split into 2–5-character sequences. Each retained sequence becomes a packed key plus one signed confidence byte: negative for English, positive for Ukrainian.
The app embeds no corpus sentences and no word-frequency table—only 173,964 n-gram records in about 2.8 MiB. Lookup is local, deterministic, and immediate.
Read the frozen evaluationFollow one correction
-
01Map the physical keys
The same six key positions produce a candidate on the Ukrainian layout.
g→пh→рb→иd→вs→іn→тghbdsn→привіт -
02Extract overlapping grams
Add word boundaries and inspect every 2–5-character window. Longer grams receive more weight.
^привіт$22 overlapping gramsn2^ппррииввіітт$n3^прприрививівітіт$n4^припривривіивітвіт$n5^привпривіривітивіт$ -
03Compare local evidence
Packed signed records are found with binary search; longer grams are weighted before the sum is normalized.
^g−112ghb−83sn$−63^п+127при+116ивіт$+43ghbdsnEN · 0.209привітУК · 0.704Model coverage · not probability+0.495 -
04Make the guarded decision
“привіт” is known; “ghbdsn” is not. The model agrees, and the policy permits correction.
ghbdsnunknownпривітknown wordCORRECTпривіт
Public preview
Keep typing. Upyr will flip the rest.
If macOS says Apple could not verify Upyr, you are using the current ad-hoc signed, unnotarized preview. Upyr has no automatic updater; use Releases for app bundles or install the source-built Cargo/Homebrew packages below.