12/5/2025

How we brought Chinese handwriting generation to life in MyScript iink SDK 4.2

Illustration

TL;DR: Extending handwriting generation to Chinese required rethinking structure, timing and style. Through higher-resolution models and training on thousands of handwriting profiles, we learned how to generate characters that feel intentional, expressive and recognizably human.

Why Chinese handwriting demanded a new direction

When we introduced English handwriting generation in SDK 4.1, it marked an important milestone. For years, our work focused on teaching models to understand handwriting — interpreting loops, angles, tension and the subtle movements people develop over time. Generating handwriting required a different mindset entirely. Instead of decoding human intention, we needed to recreate it.

As the English work matured, one question started appearing in nearly every discussion with partners across Asia: “Will you expand this to Chinese?

Their enthusiasm wasn’t just appreciation — it reflected a deep cultural connection to handwriting. Chinese characters carry structure, history and rhythm woven directly into the writing system. Supporting them meant embracing an entirely different level of complexity to retain the intention and individuality of human writing.

What we learned when moving from English to Chinese

The shift from English to Chinese was immediate and substantial. English writing is built around continuity — strokes flowing into one another, letters influencing their neighbors, spacing unfolding across words. Chinese writing is built from a different foundation. Each character stands alone, structured within an invisible square where proportion, stroke order and internal geometry define its identity.

Our earliest prototypes exposed this divide quickly. Some characters were too tidy. Others lacked internal tension. The strokes were in the right places, yet they felt disconnected from the hand that might have produced them. That missing sense of intention became one of our main guides.

Increasing the resolution to capture complexity

In English, the amount of points that worked well for generation wasn’t nearly enough for Chinese. Many characters include layered components and subtle directional shifts that demand greater precision. We eventually increased the resolution fourfold, not only to handle the greater complexity of Chinese characters but also to better capture their inherent sense of movement.

This created new challenges. Higher density meant more steps, more memory pressure and new performance considerations. Each of these required careful design so the model remained expressive without introducing unnecessary latency.

But this resolution increase was central to capturing the structural subtlety that makes Chinese handwriting feel intentional.

Preserving balance inside the character square

Chinese characters rely heavily on internal balance. A slight shift in spacing can make a character feel unsteady or overly rigid. To reflect this, we introduced structural cues that maintained proportional relationships without forcing the model into rigid, mechanical results.

These explorations showed us that while structure keeps a character grounded, expressiveness is what keeps it alive — a balance that would guide many later decisions.

Learning style from thousands of writers

Handwriting reflects more than shape. It reflects habits, built from years of muscle memory. To capture this individuality, we trained the model on thousands of handwriting profiles — three times more than for English.

These profiles created a space where each writer’s habits occupy a unique point. This allows the engine to:

  • offer predefined writing styles
  • personalize generation from a small sample
  • introduce natural variation across similar characters

To evaluate style learning, we asked it to infer a writer’s stylistic traits from just a few unseen characters — drawing on patterns learned from thousands of handwriting profiles rather than searching for an exact match.

The goal wasn’t classification accuracy. The goal was understanding — whether the model recognized the subtle behavioral differences that define a person’s writing.

One recurring discovery came from how easily the model became too consistent. When precision increased too much, the writing stopped feeling like a person’s hand and started resembling a vector drawing. Real handwriting varies naturally across pages, days and contexts. Preserving this variability, while maintaining structure, became one of the most nuanced challenges in the entire project.

Creating the unseen

One of the most magical moments in this journey came when we pushed our style system further. We wanted the engine not only to mimic known handwriting styles, but to improvise — to write characters it had never encountered before while still honoring the writer’s unique identity.

This is where style transfer shifted from a feature to a quiet revelation. Instead of treating style as a fixed template, our system learned it as a living set of behaviors — the angle of a curve, the confidence of a downstroke, the looseness or discipline in spacing. These habits form a kind of handwriting fingerprint that can be applied even to characters the writer has never produced.

It’s like asking someone to draw an unfamiliar symbol: their hand still shows its rhythm, its tilt, its balance. Our engine began doing the same.

Seeing a writer’s personality appear in new, unseen characters felt almost uncanny — not because it copied shapes, but because it reproduced behavior. It captured the human essence of writing: the way intention moves through each stroke.

This opens the door to a more natural, expressive digital ink experience, where every generated character feels grounded in creativity rather than mechanical repetition.

How we evaluated whether handwriting felt human

Measuring the quality of generated handwriting required a different approach from typical model evaluation. Recognition rates and geometric metrics offer useful signals, but they cannot capture personality, pacing or intention.

Through repeated testing, we developed a practical evaluation pattern:

  • first-glance realism, the initial impression that reveals authenticity
  • structural integrity, ensuring proportional balance across components
  • temporal behavior, assessing whether the gesture moves naturally when replayed

Comparing generated samples to real handwriting helped reveal where structure tightened too much or curves settled too neatly. Some of the best-looking static characters felt the least human in motion. This reinforced that handwriting generation must value authenticity over perfection.

An important moment came when we noticed that improved models were producing less uniform characters. At first, this seemed like a regression. But as we looked closer, we realized that the irregularities were intentional. The model had begun to learn something essential: people don’t write the same character the same way every time.

That insight marked a turning point. It confirmed that the engine was learning something deeper than geometry: it was learning behavior.

Looking ahead with handwriting generation

Supporting Chinese handwriting expanded how we understand structure, motion and style in generative models. It pushed us to unify technical clarity with expressive nuance — a combination at the heart of handwriting generation.

This work now informs our next steps:

  • expanding generative capabilities across Latin languages
  • refining personalization for rapid style adaptation
  • exploring adaptive sampling strategies for more natural variation
  • developing tools that make handwriting generation accessible across devices and applications

Across all of this, our mission remains the same: to make digital handwriting feel immediate, expressive and unmistakably human, one stroke at a time.

Check our docs and get started

Visit our developer website to explore the full suite of iink SDK capabilities and integration options. Questions or concerns? We’re here to support you every step of the way.

Visit our developer website