# ezioby/calligrapher architecture

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

- Interactive diagram: https://gitdiagram.com/ezioby/calligrapher
- Repository: https://github.com/ezioby/calligrapher

## Overview

Calligrapher is a diffusion-based text-image customization application. Users supply a source image, text, mask, and style reference; demos or batch scripts prepare these inputs, encode reference style, run masked FLUX inpainting, and return generated images. The documented modes include self-reference, cross-reference, non-text references, and multilingual generation. The graph reflects sampled entry points and model code; some utilities and the multilingual inference path are only partially sampled, so uncertain internal wiring is omitted.

Main entry points: [`models/calligrapher.py`](https://github.com/ezioby/calligrapher/blob/main/models/calligrapher.py) (Style Adapter), [`gradio_demo_multilingual.py`](https://github.com/ezioby/calligrapher/blob/main/gradio_demo_multilingual.py) (Multilingual Demo), [`utils.py`](https://github.com/ezioby/calligrapher/blob/main/utils.py) (Image Preparation), [`gradio_demo.py`](https://github.com/ezioby/calligrapher/blob/main/gradio_demo.py) (Basic Demo)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Entry Points"]
  node_demo_basic["Basic Demo<br/>[gradio_demo.py]"]
  node_demo_mask["Mask Upload Demo"]
  node_demo_multi["Multilingual Demo"]
  node_self_cli["Self-reference CLI"]
  node_cross_cli["Cross-reference CLI"]
end

subgraph group_prep["Input Preparation"]
  node_prep_utils["Image Preparation<br/>[utils.py]"]
  node_multi_utils["Glyph Rendering"]
end

subgraph group_model["Customization Model"]
  node_calligrapher["Style Adapter<br/>[calligrapher.py]"]
  node_projections["Image Projections"]
  node_attention["Style Attention"]
end

subgraph group_generation["Image Generation"]
  node_pipeline["Inpainting Pipeline"]
  node_transformer["FLUX Transformer"]
end

node_user(("User"))
node_textflux["TextFLUX Weights"]
node_results["Generated Images"]

node_user -->|"provides inputs"| node_demo_basic
node_user -->|"provides inputs"| node_demo_mask
node_user -->|"provides inputs"| node_demo_multi
node_demo_basic -->|"prepares images"| node_prep_utils
node_demo_mask -->|"prepares images"| node_prep_utils
node_demo_multi -->|"prepares images"| node_prep_utils
node_self_cli -->|"prepares images"| node_prep_utils
node_cross_cli -->|"prepares images"| node_prep_utils
node_demo_basic -->|"generates"| node_calligrapher
node_demo_mask -->|"generates"| node_calligrapher
node_demo_multi -->|"generates"| node_calligrapher
node_self_cli -->|"generates"| node_calligrapher
node_cross_cli -->|"generates"| node_calligrapher
node_demo_multi -->|"renders glyphs"| node_multi_utils
node_self_cli -->|"saves images"| node_results
node_cross_cli -->|"saves images"| node_results
node_demo_basic -->|"returns gallery"| node_results
node_demo_mask -->|"returns gallery"| node_results
node_demo_multi -->|"returns gallery"| node_results
node_calligrapher -->|"projects embeddings"| node_projections
node_calligrapher -->|"installs adapter"| node_attention
node_calligrapher -->|"invokes"| node_pipeline
node_pipeline -->|"denoises with"| node_transformer
node_demo_multi -.->|"loads optional weights"| node_textflux

click node_demo_basic "https://github.com/ezioby/calligrapher/blob/main/gradio_demo.py"
click node_demo_mask "https://github.com/ezioby/calligrapher/blob/main/gradio_demo_upload_mask.py"
click node_demo_multi "https://github.com/ezioby/calligrapher/blob/main/gradio_demo_multilingual.py"
click node_self_cli "https://github.com/ezioby/calligrapher/blob/main/infer_calligrapher_self_custom.py"
click node_cross_cli "https://github.com/ezioby/calligrapher/blob/main/infer_calligrapher_cross_custom.py"
click node_prep_utils "https://github.com/ezioby/calligrapher/blob/main/utils.py"
click node_multi_utils "https://github.com/ezioby/calligrapher/blob/main/utils_multilingual.py"
click node_calligrapher "https://github.com/ezioby/calligrapher/blob/main/models/calligrapher.py"
click node_projections "https://github.com/ezioby/calligrapher/blob/main/models/projection_models.py"
click node_attention "https://github.com/ezioby/calligrapher/blob/main/models/attention_processor.py"
click node_pipeline "https://github.com/ezioby/calligrapher/blob/main/pipeline_calligrapher.py"
click node_transformer "https://github.com/ezioby/calligrapher/blob/main/models/transformer_flux_inpainting.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_demo_basic,node_demo_mask,node_demo_multi,node_self_cli,node_cross_cli,node_user toneBlue
class node_prep_utils,node_multi_utils toneAmber
class node_calligrapher,node_projections,node_attention toneMint
class node_pipeline,node_transformer toneRose
class node_textflux,node_results toneIndigo
```

## Components

### User Entry Points

- [Basic Demo](https://github.com/ezioby/calligrapher/blob/main/gradio_demo.py): `gradio_demo.py`
- [Mask Upload Demo](https://github.com/ezioby/calligrapher/blob/main/gradio_demo_upload_mask.py): `gradio_demo_upload_mask.py`
- [Multilingual Demo](https://github.com/ezioby/calligrapher/blob/main/gradio_demo_multilingual.py): `gradio_demo_multilingual.py`
- [Self-reference CLI](https://github.com/ezioby/calligrapher/blob/main/infer_calligrapher_self_custom.py): `infer_calligrapher_self_custom.py`
- [Cross-reference CLI](https://github.com/ezioby/calligrapher/blob/main/infer_calligrapher_cross_custom.py): `infer_calligrapher_cross_custom.py`

### Input Preparation

- [Image Preparation](https://github.com/ezioby/calligrapher/blob/main/utils.py): `utils.py`
- [Glyph Rendering](https://github.com/ezioby/calligrapher/blob/main/utils_multilingual.py): `utils_multilingual.py`

### Customization Model

- [Style Adapter](https://github.com/ezioby/calligrapher/blob/main/models/calligrapher.py): `models/calligrapher.py`
- [Image Projections](https://github.com/ezioby/calligrapher/blob/main/models/projection_models.py): `models/projection_models.py`
- [Style Attention](https://github.com/ezioby/calligrapher/blob/main/models/attention_processor.py): `models/attention_processor.py`

### Image Generation

- [Inpainting Pipeline](https://github.com/ezioby/calligrapher/blob/main/pipeline_calligrapher.py): `pipeline_calligrapher.py`
- [FLUX Transformer](https://github.com/ezioby/calligrapher/blob/main/models/transformer_flux_inpainting.py): `models/transformer_flux_inpainting.py`

### Other components

- **User**
- **TextFLUX Weights**
- **Generated Images**

## Connections

- User → Basic Demo: provides inputs
- User → Mask Upload Demo: provides inputs
- User → Multilingual Demo: provides inputs
- Basic Demo → Image Preparation: prepares images
- Mask Upload Demo → Image Preparation: prepares images
- Multilingual Demo → Image Preparation: prepares images
- Self-reference CLI → Image Preparation: prepares images
- Cross-reference CLI → Image Preparation: prepares images
- Basic Demo → Style Adapter: generates
- Mask Upload Demo → Style Adapter: generates
- Multilingual Demo → Style Adapter: generates
- Self-reference CLI → Style Adapter: generates
- Cross-reference CLI → Style Adapter: generates
- Multilingual Demo → Glyph Rendering: renders glyphs
- Self-reference CLI → Generated Images: saves images
- Cross-reference CLI → Generated Images: saves images
- Basic Demo → Generated Images: returns gallery
- Mask Upload Demo → Generated Images: returns gallery
- Multilingual Demo → Generated Images: returns gallery
- Style Adapter → Image Projections: projects embeddings
- Style Adapter → Style Attention: installs adapter
- Style Adapter → Inpainting Pipeline: invokes
- Inpainting Pipeline → FLUX Transformer: denoises with
- Multilingual Demo → TextFLUX Weights: loads optional weights
