Two directions, one model
direction: "ZI2AR" turns Arabizi into Arabic script. direction: "AR2ZI" turns it back. One set of weights handles both, so the two directions agree on spelling.
Arabizi ⇄ Arabic script, without eating your numbers.
Tapra-Script is a compact 34.5M-parameter character model trained on Tunisian Arabizi, served on CPU. It moves text between Latin-typed Darija and Arabic script in both directions, normalizes the phonetic digits that stand in for Arabic letters, and copies through everything it should not touch: prices, phone numbers, dates, URLs, emoji, and Latin words. It is the model behind the live Arabizi toggle in the Tapra playground.
POST /v1/converters/transliterate
tapra-script-v1ZI2AR input
3lech 7abit l9anoun?
Output
علاش حبيت القانون؟
Live output · 32 ms
Real output
Every output on this page came from tapra-script-v1 on 8 October 2026 and is shown unedited, mistakes included. Each live response also carries its exact charge in x-tapra-cost-tnd.
The test line from the API reference. Every phonetic digit becomes its letter.
ZI2AR input
3lech 7abit l9anoun?
Output
علاش حبيت القانون؟
What it does
direction: "ZI2AR" turns Arabizi into Arabic script. direction: "AR2ZI" turns it back. One set of weights handles both, so the two directions agree on spelling.
3 → ع, 5 → خ, 7 → ح, and 9 → ق are read as letters when they are letters — and left alone when they are a price, a phone number, or a date.
Latin words, acronyms, punctuation, emoji, and URLs pass straight through instead of being guessed at as Arabic syllables.
Requests up to 5,000 characters finish fast enough to run behind a keystroke, which is how the playground Arabizi toggle stays live.
Integrate
const res = await fetch(baseUrl + '/v1/converters/transliterate', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: '5allast 20.500 DT, 3aychek',
direction: 'ZI2AR'
})
});
const { output } = await res.json();
// خلصت 20.500 DT, عيّشكComparison
Compared with rule-based Arabizi converters and phonetic transliterators.
| Capability | Tapra-Script | Generic alternative |
|---|---|---|
| Digits as letters | 3, 5, 7, 9 mapped with context | Hard-coded character substitution, wrong on real numbers |
| Numbers, prices, phone numbers | Detected and copied through untouched | Rewritten into Arabic-Indic digits or split apart |
| Latin words inside Darija | Copied through as-is | Transliterated into unreadable Arabic |
| Reverse direction | One model, both directions | Usually one-way, or a second lossy ruleset |
| Punctuation | Commas and question marks mapped to Arabic forms | Latin punctuation left inside Arabic text |
| Cost | 0.100 TND / 1k chars (≈ $0.033), $0.001 minimum | Bundled into an LLM call with token markups |
Pricing
You pay for exactly what you send. The same prepaid balance covers all five Tapra models, billed in TND.
Headline rate
0.100 TND / 1k chars
Bidirectional transliteration for the way Tunisians actually type: 3, 5, 7, and 9 are letters, but 20.500 DT and 07 12 34 56 are still numbers.
Questions
3 → ع, 7 → ح, 9 → ق, and 5 → خ when converting to Arabic script. In the reverse direction it writes them the same way, and uses 8 for غ as many Tunisians type it. Digits that belong to a price, a phone number, or a date stay digits.
Yes. French words are copied through untouched, so mixed messages stay readable in both directions.
At 5,000 characters per request the model answers fast enough for debounced live editing. The playground does exactly that.
The rest of the family
Tapra-Voice
Batch Tunisian speech to text, with the code-switching intact.
Explore03 · NMTTapra-Translate
Derja in, real meaning out — in both directions.
Explore04 · TTSTapra-Speak
A Tunisian voice that sounds like it grew up here.
Explore05 · RealtimeTapra-Voice-Realtime
Partial tokens while the sentence is still being spoken.
ExplorePut Tapra-Script behind a real workload.
2 TND welcome balance, no credit card, playground and API keys included.