A comprehensive handwriting generation system using deep learning models including GANs, VAEs, and Diffusion models.
- Multiple Model Architectures: GAN, VAE, and Diffusion models for handwriting generation
- Text-to-Image Generation: Generate realistic handwritten text from input strings
- Modern Tech Stack: PyTorch 2.0+, PyTorch Lightning, OmegaConf, and more
- Comprehensive Evaluation: Multiple metrics including FID, SSIM, PSNR, and diversity measures
- Interactive Demo: Streamlit-based web application for easy experimentation
- Production Ready: Proper configuration management, logging, and checkpointing
- Clone the repository:
git clone https://github.com/kryptologyst/Handwriting-Generation.git
cd Handwriting-Generation- Install dependencies:
pip install -r requirements.txtOr install in development mode:
pip install -e ".[dev]"Train a GAN model:
python src/scripts/train.py --config configs/config.yamlTrain a VAE model:
python src/scripts/train.py --config configs/config.yaml model=vaeGenerate handwriting samples:
python src/scripts/sample.py --checkpoint checkpoints/gan_model.ckpt --text "Hello, world!" --num_samples 4Evaluate model performance:
python src/scripts/evaluate.py --checkpoint checkpoints/gan_model.ckpt --output_dir evaluation_resultsLaunch the interactive demo:
streamlit run demo/app.pyhandwriting-generation/
├── src/ # Source code
│ ├── models/ # Model architectures
│ │ ├── gan.py # GAN implementation
│ │ ├── vae.py # VAE implementation
│ │ └── diffusion.py # Diffusion model (optional)
│ ├── data/ # Data handling
│ │ └── dataset.py # Dataset classes
│ ├── training/ # Training utilities
│ │ └── trainer.py # PyTorch Lightning modules
│ ├── evaluation/ # Evaluation metrics
│ │ └── evaluator.py # Evaluation utilities
│ ├── utils/ # Utility functions
│ │ ├── core.py # Core utilities
│ │ ├── text.py # Text processing
│ │ └── sampling.py # Sampling utilities
│ └── scripts/ # Command-line scripts
│ ├── train.py # Training script
│ ├── sample.py # Sampling script
│ └── evaluate.py # Evaluation script
├── configs/ # Configuration files
│ ├── config.yaml # Main configuration
│ └── model/ # Model-specific configs
│ ├── gan.yaml # GAN configuration
│ ├── vae.yaml # VAE configuration
│ └── diffusion.yaml # Diffusion configuration
├── demo/ # Demo application
│ └── app.py # Streamlit app
├── tests/ # Unit tests
├── assets/ # Generated samples and assets
├── checkpoints/ # Model checkpoints
├── logs/ # Training logs
└── requirements.txt # Dependencies
The project uses OmegaConf for configuration management. Key configuration files:
configs/config.yaml: Main configuration with global settingsconfigs/model/gan.yaml: GAN-specific configurationconfigs/model/vae.yaml: VAE-specific configuration
# Global settings
seed: 42
device: auto # auto, cpu, cuda, mps
precision: 16-mixed
# Training
batch_size: 32
max_epochs: 100
learning_rate: 0.0002
# Model architecture
model:
_target_: src.models.gan.HandwritingGAN
generator:
latent_dim: 100
text_embedding_dim: 256
hidden_dims: [512, 256, 128]The GAN implementation includes:
- Generator with upsampling blocks and self-attention
- Discriminator with downsampling and spectral normalization
- Multiple loss functions (hinge, NS, WGAN-GP)
- EMA (Exponential Moving Average) for stable training
The VAE implementation includes:
- Encoder with downsampling blocks
- Decoder with upsampling blocks
- Reparameterization trick for latent sampling
- KL annealing for better training dynamics
- Pre-trained text encoder (DistilBERT)
- Text cleaning and normalization
- Embedding projection to model dimensions
The system provides comprehensive evaluation metrics:
- Reconstruction Metrics: MSE, MAE, SSIM, PSNR
- Diversity Metrics: Pairwise distance analysis
- Generation Quality: Visual inspection and comparison grids
The project includes a synthetic handwriting dataset generator that creates training data using PIL. This allows the system to run without external datasets.
For production use, you can replace this with real handwriting datasets by implementing custom dataset classes.
The project uses:
- Black for code formatting
- Ruff for linting
- Pytest for testing
- Pre-commit hooks for quality assurance
pytest tests/black src/
ruff check src/The system supports automatic mixed precision training for faster training and reduced memory usage.
Automatic device detection supports:
- CUDA (NVIDIA GPUs)
- MPS (Apple Silicon)
- CPU fallback
Integration with:
- Weights & Biases (wandb)
- TensorBoard
- MLflow
- Synthetic Data: The current implementation uses synthetic data. For production use, real handwriting datasets are recommended.
- Model Size: Models are designed for demonstration purposes. Larger models may be needed for production-quality results.
- Text Length: Current models work best with shorter text inputs (up to 200 characters).
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
MIT License - see LICENSE file for details.
If you use this project in your research, please cite:
@software{handwriting_generation,
title={Handwriting Generation: A Modern Deep Learning Approach},
author={Kryptologyst},
year={2025},
url={https://github.com/kryptologyst/Handwriting-Generation}
}- PyTorch team for the excellent deep learning framework
- PyTorch Lightning for simplifying training workflows
- The open-source community for various components and inspiration