# lingzhihao-111/handwriting-generation architecture

> Architecture diagram of the GitHub repository lingzhihao-111/handwriting-generation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lingzhihao-111/handwriting-generation
- Repository: https://github.com/lingzhihao-111/handwriting-generation

## Overview

This repository is a research toolkit for handwriting synthesis: it learns page character-box layouts, generates text lines conditioned on handwriting style, and combines those stages for page output. A separate page-fill data-preparation path and handwriting-generation metrics support related experiments. The excerpts show the page-layout training path and parts of TGC training and page generation; links for unsampled modules are limited to relationships supported by their visible entry points or documented roles.

Main entry points: [`models/TGC-Diff/finetune_ch.py`](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/finetune_ch.py) (TGC fine-tuning), [`eval/batch_tgc_page_lines.py`](https://github.com/lingzhihao-111/handwriting-generation/blob/main/eval/batch_tgc_page_lines.py) (Page line generation), [`models/page_layout-diff/train_page_temp.py`](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/train_page_temp.py) (Layout training), [`models/TGC-Diff/trainer/trainer.py`](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/trainer/trainer.py) (TGC trainer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_layout["Page layout"]
  node_layout_data["Page box dataset<br/>[page_dataset.py]"]
  node_layout_train["Layout training<br/>[train_page_temp.py]"]
  node_layout_model["Layout flow model<br/>[model.py]"]
  node_layout_trainer["Layout trainer<br/>[page_trainer.py]"]
  node_layout_sample["Layout sampling"]
  node_page_geom["Box rendering<br/>[page_geom.py]"]
end

subgraph group_synthesis["Style synthesis"]
  node_tgc_data["Text-line dataset"]
  node_tgc_finetune["TGC fine-tuning<br/>[finetune_ch.py]"]
  node_tgc_train["TGC training<br/>[train_ch.py]"]
  node_tgc_trainer["TGC trainer<br/>[trainer.py]"]
  node_tgc_model["Style diffusion<br/>[unet.py]"]
  node_tgc_diffusion["Diffusion process<br/>[diffusion.py]"]
  node_page_lines["Page line generation"]
end

subgraph group_data["Data preparation"]
  node_fill_prep["Fill data builder"]
  node_page_fill_data["Page-fill dataset"]
end

subgraph group_evaluation["Evaluation"]
  node_hwd_data["Handwriting datasets<br/>[base_dataset.py]"]
  node_hwd_metrics["Generation metrics<br/>[scores.py]"]
  node_eval_scripts["Experiment evaluation<br/>[batch_tgc_diff.py]"]
end

node_user(("Researcher"))
node_page_output["Generated page"]

node_user -->|"trains layout"| node_layout_train
node_layout_train -->|"loads batches"| node_layout_data
node_layout_train -->|"builds model"| node_layout_model
node_layout_train -->|"starts training"| node_layout_trainer
node_layout_trainer -->|"optimizes"| node_layout_model
node_user -->|"samples layout"| node_layout_sample
node_layout_sample -->|"renders boxes"| node_page_geom
node_user -->|"fine-tunes"| node_tgc_finetune
node_tgc_finetune -->|"loads text lines"| node_tgc_data
node_tgc_finetune -->|"builds model"| node_tgc_model
node_tgc_finetune -->|"builds diffusion"| node_tgc_diffusion
node_tgc_finetune -->|"starts training"| node_tgc_trainer
node_tgc_trainer -->|"trains and samples"| node_tgc_model
node_tgc_trainer -->|"computes loss"| node_tgc_diffusion
node_user -->|"generates page"| node_page_lines
node_page_lines -->|"uses layout"| node_layout_sample
node_page_lines -->|"generates lines"| node_tgc_model
node_page_lines -->|"renders page"| node_page_geom
node_page_lines -->|"writes page"| node_page_output
node_user -->|"prepares fill data"| node_fill_prep
node_fill_prep -->|"writes tensors"| node_page_fill_data
node_user -->|"runs experiments"| node_eval_scripts
node_eval_scripts -->|"scores output"| node_hwd_metrics
node_hwd_data -->|"provides samples"| node_hwd_metrics

click node_layout_data "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/dataloader/page_dataset.py"
click node_layout_train "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/train_page_temp.py"
click node_layout_model "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/model/model.py"
click node_layout_trainer "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/trainer/page_trainer.py"
click node_layout_sample "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/sample_page_layout.py"
click node_page_geom "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/utils/page_geom.py"
click node_tgc_data "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/dataset/textline_dataset.py"
click node_tgc_finetune "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/finetune_ch.py"
click node_tgc_train "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/train_ch.py"
click node_tgc_trainer "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/trainer/trainer.py"
click node_tgc_model "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/models/unet.py"
click node_tgc_diffusion "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/models/diffusion.py"
click node_page_lines "https://github.com/lingzhihao-111/handwriting-generation/blob/main/eval/batch_tgc_page_lines.py"
click node_fill_prep "https://github.com/lingzhihao-111/handwriting-generation/blob/main/data/build_casia_fill_input.py"
click node_page_fill_data "https://github.com/lingzhihao-111/handwriting-generation/blob/main/data/page_fill_dataset.py"
click node_hwd_data "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/HWD/src/hwd/datasets/base_dataset.py"
click node_hwd_metrics "https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/HWD/src/hwd/scores.py"
click node_eval_scripts "https://github.com/lingzhihao-111/handwriting-generation/blob/main/eval/batch_tgc_diff.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_layout_data,node_layout_train,node_layout_model,node_layout_trainer,node_layout_sample,node_page_geom toneBlue
class node_tgc_data,node_tgc_finetune,node_tgc_train,node_tgc_trainer,node_tgc_model,node_tgc_diffusion,node_page_lines toneAmber
class node_fill_prep,node_page_fill_data toneMint
class node_hwd_data,node_hwd_metrics,node_eval_scripts toneRose
class node_user,node_page_output toneIndigo
```

## Components

### Page layout

- [Page box dataset](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/dataloader/page_dataset.py): `models/page_layout-diff/dataloader/page_dataset.py`
- [Layout training](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/train_page_temp.py): `models/page_layout-diff/train_page_temp.py`
- [Layout flow model](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/model/model.py): `models/page_layout-diff/model/model.py`
- [Layout trainer](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/trainer/page_trainer.py): `models/page_layout-diff/trainer/page_trainer.py`
- [Layout sampling](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/sample_page_layout.py): `models/page_layout-diff/sample_page_layout.py`
- [Box rendering](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/page_layout-diff/utils/page_geom.py): `models/page_layout-diff/utils/page_geom.py`

### Style synthesis

- [Text-line dataset](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/dataset/textline_dataset.py): `models/TGC-Diff/dataset/textline_dataset.py`
- [TGC fine-tuning](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/finetune_ch.py): `models/TGC-Diff/finetune_ch.py`
- [TGC training](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/train_ch.py): `models/TGC-Diff/train_ch.py`
- [TGC trainer](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/trainer/trainer.py): `models/TGC-Diff/trainer/trainer.py`
- [Style diffusion](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/models/unet.py): `models/TGC-Diff/models/unet.py`
- [Diffusion process](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/TGC-Diff/models/diffusion.py): `models/TGC-Diff/models/diffusion.py`
- [Page line generation](https://github.com/lingzhihao-111/handwriting-generation/blob/main/eval/batch_tgc_page_lines.py): `eval/batch_tgc_page_lines.py`

### Data preparation

- [Fill data builder](https://github.com/lingzhihao-111/handwriting-generation/blob/main/data/build_casia_fill_input.py): `data/build_casia_fill_input.py`
- [Page-fill dataset](https://github.com/lingzhihao-111/handwriting-generation/blob/main/data/page_fill_dataset.py): `data/page_fill_dataset.py`

### Evaluation

- [Handwriting datasets](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/HWD/src/hwd/datasets/base_dataset.py): `models/HWD/src/hwd/datasets/base_dataset.py`
- [Generation metrics](https://github.com/lingzhihao-111/handwriting-generation/blob/main/models/HWD/src/hwd/scores.py): `models/HWD/src/hwd/scores.py`
- [Experiment evaluation](https://github.com/lingzhihao-111/handwriting-generation/blob/main/eval/batch_tgc_diff.py): `eval/batch_tgc_diff.py`

### Other components

- **Researcher**
- **Generated page**

## Connections

- Researcher → Layout training: trains layout
- Layout training → Page box dataset: loads batches
- Layout training → Layout flow model: builds model
- Layout training → Layout trainer: starts training
- Layout trainer → Layout flow model: optimizes
- Researcher → Layout sampling: samples layout
- Layout sampling → Box rendering: renders boxes
- Researcher → TGC fine-tuning: fine-tunes
- TGC fine-tuning → Text-line dataset: loads text lines
- TGC fine-tuning → Style diffusion: builds model
- TGC fine-tuning → Diffusion process: builds diffusion
- TGC fine-tuning → TGC trainer: starts training
- TGC trainer → Style diffusion: trains and samples
- TGC trainer → Diffusion process: computes loss
- Researcher → Page line generation: generates page
- Page line generation → Layout sampling: uses layout
- Page line generation → Style diffusion: generates lines
- Page line generation → Box rendering: renders page
- Page line generation → Generated page: writes page
- Researcher → Fill data builder: prepares fill data
- Fill data builder → Page-fill dataset: writes tensors
- Researcher → Experiment evaluation: runs experiments
- Experiment evaluation → Generation metrics: scores output
- Handwriting datasets → Generation metrics: provides samples
