File size: 3,822 Bytes
8bd3630
c549f81
8bd3630
c549f81
8bd3630
 
 
c549f81
8bd3630
 
 
 
c549f81
8bd3630
c549f81
8bd3630
 
c549f81
8bd3630
 
 
 
 
 
 
 
 
 
 
 
 
c549f81
8bd3630
 
 
 
c549f81
8bd3630
c549f81
8bd3630
c549f81
8bd3630
 
c549f81
8bd3630
 
 
 
c549f81
8bd3630
 
 
c549f81
8bd3630
c549f81
8bd3630
c549f81
8bd3630
c549f81
8bd3630
 
 
 
 
c549f81
8bd3630
 
 
c549f81
8bd3630
c549f81
8bd3630
 
 
 
 
c549f81
8bd3630
c549f81
8bd3630
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# scribefont

Single-pass handwriting-to-font synthesis, calligrapher style extraction, 16-point quadratic Bézier contour generation, calibrated `p_missing` abstention, and zero-dependency binary OpenType/TrueType (`.ttf`) compilation in JavaScript, Python, and Browser WebAssembly ONNX.

- **Interactive Studio (Browser WASM ONNX + Zero-Dep Engine)**: [https://hemanth.github.io/scribefont/](https://hemanth.github.io/scribefont/)
- **ScribeFontBench Leaderboard**: [https://hemanth.github.io/scribefont/bench.html](https://hemanth.github.io/scribefont/bench.html)
- **Empirical Science Report**: [`bench/SCIENCE_REPORT.md`](./bench/SCIENCE_REPORT.md)

```bash
npm install scribefont
pip install scribefont
```

## Quick start (JavaScript / ESM)

```js
import scribefont, { verifyTrueTypeBytes } from 'scribefont';

const font = scribefont(
  {
    style: {
      slant_deg: 14.5,
      stroke_width: 52,
      x_height_ratio: 0.68,
      width_scale: 0.95,
      roundness: 0.78,
      serif_flare: 0.50,
    },
  },
  { family: 'MiraScript' }
);

const ttfBytes = font.toTTF();               // 7,292-byte installable binary .ttf (Uint8Array)
const svgPreview = font.renderSVG('Hello!'); // Positioned, optically-kerned vector <svg>
const check = verifyTrueTypeBytes(ttfBytes); // { valid: true, checksum_ok: true, num_tables: 9 }
```

`scribefont()` extracts calligrapher biometrics and synthesizes all 62 alphanumeric Bézier glyphs (`A–Z`, `a–z`, `0–9`). `toTTF()` compiles a standards-compliant binary OpenType/TrueType font (`0xB1B0AFBA` master checksum) with zero external dependencies.

## Quick start (Python)

```python
from scribefont import scribefont, verify_truetype_bytes

font = scribefont(
    {"strokes": [[[12, 80], [28, 10], [44, 80]], [[18, 45], [38, 45]]]},
    family="MiraHand",
)

ttf_bytes = font.to_ttf()
assert verify_truetype_bytes(ttf_bytes)["valid"] is True
```

`glyph(ch)` inspects per-character bounding boxes, `advance_width`, `lsb`, quadratic SVG path commands, and calibrated `p_missing` abstention probabilities. `kerning(left, right)` returns optical kerning adjustments in font units (`1000 UPM`).

## Sanskrit, Devanagari & Indic Script Support (`U+0900..U+0D7F`)

Pass `script` (`'sanskrit' | 'devanagari' | 'hindi' | 'kannada' | 'tamil' | 'telugu' | 'bengali' | 'multilingual'`) to synthesize 348+ multi-contour Indic handwritten glyphs — including Vedic/Sanskrit symbols (`ॐ ऽ । ॥`), vowels (`अ–औ ऋ ॠ ऌ`), consonants (`क–ह ळ`), zero-advance combining vowel matras & virama (`े ै ु ू ृ ् ं ँ`), pre-base matra visual reordering (`ि ি ে ৈ ெ ே ை`), and level Shirorekha headline bars:

```js
const sanskritFont = scribefont(
  { style: { slant_deg: 6.0, stroke_width: 60 } },
  { family: 'ScribeSanskrit', script: 'sanskrit' }
);

const svg = sanskritFont.renderSVG('सत्यमेव जयते ॥ वसुधैव कुटुम्बकम् ॐ');
const ttf = sanskritFont.toTTF();
```

## 3-Tier Empirical Benchmark (`B=1,000` Bootstrap 95% CIs)

| Runtime Tier | Artifact | Suite A: Wild Few-Shot ($N=60$) | Suite B: 62-Glyph `.TTF` ($N=62$) | Contour MAE | Abstention AUROC | Latency `p50` |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| **Tier 1A: PyTorch FP32 Neural** | `11.40 MB` (`2.94M`) | **100.0%** `[100, 100]` | **100.0%** `[100, 100]` | **2.14 UPM** | **1.000** | `4.38 ms` |
| **Tier 1B: Browser ONNX Int8 (WASM SIMD)** | `3.15 MB` (`3.62x` smaller) | **100.0%** `[100, 100]` | **100.0%** `[100, 100]` | **2.15 UPM** | **1.000** | `0.96 ms` |
| **Tier 2: Zero-Dep JS / Python Engine** | `0.00 MB` (`~18 KB` code) | `73.33%` `[61.7, 83.3]` | **100.0%** `[100, 100]` | `0.00 / 12.71 UPM` | **1.000** | **0.031 ms** |

## License

MIT © [Hemanth.HM](https://h3manth.com)