| <svg xmlns="http://www.w3.org/2000/svg" width="1400" height="760" viewBox="0 0 1400 760" role="img" aria-labelledby="title desc"> |
| <title id="title">AIFlow Math Ink 0.5 geometric gridding pipeline</title> |
| <desc id="desc">Ordered pen strokes become boxes, adaptive geometric relations, connected components, and clean formula cell images for an external recognizer.</desc> |
| <defs> |
| <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"> |
| <stop offset="0" stop-color="#071426"/> |
| <stop offset="1" stop-color="#102844"/> |
| </linearGradient> |
| <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%"> |
| <feDropShadow dx="0" dy="10" stdDeviation="12" flood-color="#000" flood-opacity=".28"/> |
| </filter> |
| <marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"> |
| <path d="M0 0L12 6L0 12Z" fill="#7dd3fc"/> |
| </marker> |
| <style> |
| .title{font:700 42px system-ui,sans-serif;fill:#f8fafc} |
| .subtitle{font:400 19px system-ui,sans-serif;fill:#a9bfd6} |
| .box{fill:#112f4d;stroke:#5bc0eb;stroke-width:2} |
| .box2{fill:#173b35;stroke:#5ee6a8;stroke-width:2} |
| .label{font:700 21px system-ui,sans-serif;fill:#f8fafc} |
| .copy{font:400 15px system-ui,sans-serif;fill:#c9d8e6} |
| .mini{font:600 14px ui-monospace,monospace;fill:#8ce4ff} |
| .arrow{stroke:#7dd3fc;stroke-width:4;fill:none;marker-end:url(#arrow)} |
| .stroke{stroke:#f8fafc;stroke-width:7;fill:none;stroke-linecap:round;stroke-linejoin:round} |
| .bbox{fill:none;stroke:#fbbf24;stroke-width:2;stroke-dasharray:7 5} |
| .edge{stroke:#5ee6a8;stroke-width:3;opacity:.85} |
| </style> |
| </defs> |
| <rect width="1400" height="760" rx="28" fill="url(#bg)"/> |
| <text x="70" y="82" class="title">AIFlow Math Ink 0.5</text> |
| <text x="70" y="118" class="subtitle">Deterministic stroke geometry → recognizer-ready formula cells</text> |
|
|
| <g filter="url(#shadow)"> |
| <rect class="box" x="65" y="185" width="250" height="390" rx="22"/> |
| <text class="label" x="90" y="225">1 · Online strokes</text> |
| <text class="copy" x="90" y="254">ordered (x, y), width, stable ID</text> |
| <path class="stroke" d="M112 330 C135 285 153 376 177 328"/> |
| <path class="stroke" d="M196 330 L245 330"/> |
| <path class="stroke" d="M205 295 L236 295"/> |
| <path class="stroke" d="M205 365 L236 365"/> |
| <path class="stroke" d="M116 468 L175 468"/> |
| <path class="stroke" d="M201 440 L201 500 M178 470 L226 470"/> |
| <text class="mini" x="90" y="545">No raster OCR yet</text> |
|
|
| <rect class="box" x="395" y="185" width="250" height="390" rx="22"/> |
| <text class="label" x="420" y="225">2 · Geometry graph</text> |
| <text class="copy" x="420" y="254">scale-adaptive boxes and edges</text> |
| <rect class="bbox" x="436" y="294" width="58" height="68"/> |
| <rect class="bbox" x="516" y="315" width="84" height="26"/> |
| <rect class="bbox" x="530" y="275" width="48" height="25"/> |
| <rect class="bbox" x="530" y="356" width="48" height="25"/> |
| <circle cx="465" cy="328" r="8" fill="#5ee6a8"/> |
| <circle cx="558" cy="328" r="8" fill="#5ee6a8"/> |
| <circle cx="554" cy="288" r="8" fill="#5ee6a8"/> |
| <circle cx="554" cy="368" r="8" fill="#5ee6a8"/> |
| <path class="edge" d="M473 328L546 328M558 320L554 296M558 336L554 360"/> |
| <text class="mini" x="420" y="430">baseline · attachment</text> |
| <text class="mini" x="420" y="459">fraction · delimiter bridges</text> |
| <text class="copy" x="420" y="523">median stroke height sets scale</text> |
|
|
| <rect class="box" x="725" y="185" width="250" height="390" rx="22"/> |
| <text class="label" x="750" y="225">3 · Components</text> |
| <text class="copy" x="750" y="254">disjoint-set union + stable order</text> |
| <rect x="765" y="294" width="170" height="110" rx="16" fill="#17475c" stroke="#5ee6a8" stroke-width="3"/> |
| <circle cx="800" cy="335" r="13" fill="#5ee6a8"/> |
| <circle cx="850" cy="335" r="13" fill="#5ee6a8"/> |
| <circle cx="900" cy="335" r="13" fill="#5ee6a8"/> |
| <path class="edge" d="M813 335L837 335M863 335L887 335"/> |
| <rect x="765" y="445" width="170" height="70" rx="16" fill="#17475c" stroke="#5ee6a8" stroke-width="3"/> |
| <circle cx="815" cy="480" r="13" fill="#5ee6a8"/> |
| <circle cx="885" cy="480" r="13" fill="#5ee6a8"/> |
| <path class="edge" d="M828 480L872 480"/> |
| <text class="mini" x="750" y="548">component → formula cell</text> |
|
|
| <rect class="box2" x="1055" y="185" width="280" height="390" rx="22"/> |
| <text class="label" x="1080" y="225">4 · Clean cell images</text> |
| <text class="copy" x="1080" y="254">RGB crops for an external model</text> |
| <rect x="1090" y="290" width="210" height="115" rx="12" fill="#fff"/> |
| <path d="M1122 350C1145 305 1163 390 1187 345" stroke="#111827" stroke-width="7" fill="none" stroke-linecap="round"/> |
| <path d="M1210 347L1270 347M1220 315L1260 315M1220 380L1260 380" stroke="#111827" stroke-width="7" fill="none" stroke-linecap="round"/> |
| <rect x="1090" y="435" width="210" height="75" rx="12" fill="#fff"/> |
| <path d="M1130 473L1190 473M1230 448L1230 498M1205 473L1255 473" stroke="#111827" stroke-width="7" fill="none" stroke-linecap="round"/> |
| <text class="mini" x="1080" y="548">PIL.Image.Image[]</text> |
| </g> |
|
|
| <path class="arrow" d="M325 380H380"/> |
| <path class="arrow" d="M655 380H710"/> |
| <path class="arrow" d="M985 380H1040"/> |
|
|
| <rect x="65" y="640" width="1270" height="62" rx="16" fill="#091a2e" stroke="#294b68"/> |
| <text class="copy" x="90" y="678">Boundary: this repository stops at cell images. No OCR model, weights, tokenizer, prediction, or training data is included.</text> |
| </svg> |
|
|