# fjibj/pic2ppt architecture

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

- Interactive diagram: https://gitdiagram.com/fjibj/pic2ppt
- Repository: https://github.com/fjibj/pic2ppt

## Overview

Pic2PPT turns diagrams into editable PowerPoint shapes. Its main workflow accepts a PNG/JPG in the GUI or pipeline, uses an AI provider to produce SVG, validates and repairs that SVG, then parses and renders it as PPTX. SVGs can also be converted directly. The SVG renderer dispatches elements to specialized handlers, supported by shared geometry, style, and color logic. The README also documents file selection, drag-and-drop, and paste in the GUI. Relationships for GUI interactions and some unsampled features are limited to README or index evidence.

Main entry points: [`src/svg_converter/handlers/__init__.py`](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/__init__.py) (Handler registry), [`src/pipeline.py`](https://github.com/fjibj/pic2ppt/blob/main/src/pipeline.py) (Image pipeline), [`src/svg_converter/converter.py`](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/converter.py) (SVG converter), [`src/svg_converter/handlers/polygons.py`](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/polygons.py) (Paths and polygons)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry"]
  node_image_input["PNG/JPG input"]
  node_svg_input["SVG input"]
  node_gui["Desktop GUI<br/>[pic2ppt.py]"]
  node_limiter["Usage limiter<br/>[usage_limiter.py]"]
end

subgraph group_image["Image conversion"]
  node_pipeline["Image pipeline<br/>[pipeline.py]"]
  node_ai["AI image-to-SVG<br/>[ai_client.py]"]
  node_providers["AI providers"]
  node_validator["SVG validator<br/>[validator.py]"]
end

subgraph group_render["SVG rendering"]
  node_svg_converter["SVG converter<br/>[converter.py]"]
  node_parser["SVG parser<br/>[parser.py]"]
  node_registry["Handler registry<br/>[__init__.py]"]
  node_models["SVG models<br/>[models.py]"]
  node_basic["Basic shapes<br/>[basic_shapes.py]"]
  node_polygons["Paths and polygons<br/>[polygons.py]"]
  node_text["Text handler<br/>[text.py]"]
  node_groups["Group handler<br/>[group.py]"]
  node_geometry["Geometry analysis<br/>[geometry.py]"]
  node_colors["Color parsing<br/>[color_utils.py]"]
end

subgraph group_output["PowerPoint output"]
  node_pptx["Editable PPTX"]
end

node_user(("Diagram user"))

node_user -.->|"uploads or pastes"| node_gui
node_user -.->|"selects image"| node_image_input
node_user -.->|"selects SVG"| node_svg_input
node_image_input -->|"converts image"| node_pipeline
node_gui -->|"starts conversion"| node_pipeline
node_gui -->|"checks usage"| node_limiter
node_pipeline -->|"requests SVG"| node_ai
node_ai -.->|"calls AI API"| node_providers
node_pipeline -->|"validates and repairs"| node_validator
node_pipeline -->|"converts SVG"| node_svg_converter
node_svg_input -.->|"converts directly"| node_svg_converter
node_svg_converter -->|"parses SVG"| node_parser
node_svg_converter -->|"registers handlers"| node_registry
node_svg_converter -.->|"saves presentation"| node_pptx
node_parser -->|"builds elements"| node_models
node_parser -->|"parses styles"| node_colors
node_registry -->|"dispatches elements"| node_models
node_registry -->|"dispatches shapes"| node_basic
node_registry -->|"dispatches paths"| node_polygons
node_registry -->|"dispatches text"| node_text
node_registry -->|"dispatches groups"| node_groups
node_polygons -->|"analyzes geometry"| node_geometry
node_polygons -->|"uses shape support"| node_basic
node_basic -->|"parses colors"| node_colors
node_text -->|"parses colors"| node_colors
node_basic -->|"creates shapes"| node_pptx
node_polygons -->|"creates paths"| node_pptx

click node_gui "https://github.com/fjibj/pic2ppt/blob/main/pic2ppt.py"
click node_limiter "https://github.com/fjibj/pic2ppt/blob/main/src/usage_limiter.py"
click node_pipeline "https://github.com/fjibj/pic2ppt/blob/main/src/pipeline.py"
click node_ai "https://github.com/fjibj/pic2ppt/blob/main/src/png2svg/ai_client.py"
click node_validator "https://github.com/fjibj/pic2ppt/blob/main/src/png2svg/validator.py"
click node_svg_converter "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/converter.py"
click node_parser "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/parser.py"
click node_registry "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/__init__.py"
click node_models "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/models.py"
click node_basic "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/basic_shapes.py"
click node_polygons "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/polygons.py"
click node_text "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/text.py"
click node_groups "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/group.py"
click node_geometry "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/geometry.py"
click node_colors "https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/color_utils.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_image_input,node_svg_input,node_gui,node_limiter,node_user toneBlue
class node_pipeline,node_ai,node_providers,node_validator toneAmber
class node_svg_converter,node_parser,node_registry,node_models,node_basic,node_polygons,node_text,node_groups,node_geometry,node_colors toneMint
class node_pptx toneRose
```

## Components

### User entry

- **PNG/JPG input**
- **SVG input**
- [Desktop GUI](https://github.com/fjibj/pic2ppt/blob/main/pic2ppt.py): `pic2ppt.py`
- [Usage limiter](https://github.com/fjibj/pic2ppt/blob/main/src/usage_limiter.py): `src/usage_limiter.py`

### Image conversion

- [Image pipeline](https://github.com/fjibj/pic2ppt/blob/main/src/pipeline.py): `src/pipeline.py`
- [AI image-to-SVG](https://github.com/fjibj/pic2ppt/blob/main/src/png2svg/ai_client.py): `src/png2svg/ai_client.py`
- **AI providers**
- [SVG validator](https://github.com/fjibj/pic2ppt/blob/main/src/png2svg/validator.py): `src/png2svg/validator.py`

### SVG rendering

- [SVG converter](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/converter.py): `src/svg_converter/converter.py`
- [SVG parser](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/parser.py): `src/svg_converter/parser.py`
- [Handler registry](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/__init__.py): `src/svg_converter/handlers/__init__.py`
- [SVG models](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/models.py): `src/svg_converter/models.py`
- [Basic shapes](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/basic_shapes.py): `src/svg_converter/handlers/basic_shapes.py`
- [Paths and polygons](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/polygons.py): `src/svg_converter/handlers/polygons.py`
- [Text handler](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/text.py): `src/svg_converter/handlers/text.py`
- [Group handler](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/handlers/group.py): `src/svg_converter/handlers/group.py`
- [Geometry analysis](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/geometry.py): `src/svg_converter/geometry.py`
- [Color parsing](https://github.com/fjibj/pic2ppt/blob/main/src/svg_converter/color_utils.py): `src/svg_converter/color_utils.py`

### PowerPoint output

- **Editable PPTX**

### Other components

- **Diagram user**

## Connections

- Diagram user → Desktop GUI: uploads or pastes (evidence: `README.md`)
- Diagram user → PNG/JPG input: selects image (evidence: `README.md`)
- Diagram user → SVG input: selects SVG (evidence: `README.md`)
- PNG/JPG input → Image pipeline: converts image (evidence: `src/pipeline.py`)
- Desktop GUI → Image pipeline: starts conversion (evidence: `pic2ppt.py`)
- Desktop GUI → Usage limiter: checks usage (evidence: `pic2ppt.py`)
- Image pipeline → AI image-to-SVG: requests SVG (evidence: `src/pipeline.py`)
- AI image-to-SVG → AI providers: calls AI API (evidence: `src/png2svg/ai_client.py`)
- Image pipeline → SVG validator: validates and repairs (evidence: `src/pipeline.py`)
- Image pipeline → SVG converter: converts SVG (evidence: `src/pipeline.py`)
- SVG input → SVG converter: converts directly (evidence: `README.md`)
- SVG converter → SVG parser: parses SVG (evidence: `src/svg_converter/converter.py`)
- SVG converter → Handler registry: registers handlers (evidence: `src/svg_converter/converter.py`)
- SVG converter → Editable PPTX: saves presentation (evidence: `README.md`)
- SVG parser → SVG models: builds elements (evidence: `src/svg_converter/parser.py`)
- SVG parser → Color parsing: parses styles (evidence: `src/svg_converter/parser.py`)
- Handler registry → SVG models: dispatches elements (evidence: `src/svg_converter/handlers/__init__.py`)
- Handler registry → Basic shapes: dispatches shapes (evidence: `src/svg_converter/converter.py`)
- Handler registry → Paths and polygons: dispatches paths (evidence: `src/svg_converter/converter.py`)
- Handler registry → Text handler: dispatches text (evidence: `src/svg_converter/converter.py`)
- Handler registry → Group handler: dispatches groups (evidence: `src/svg_converter/converter.py`)
- Paths and polygons → Geometry analysis: analyzes geometry (evidence: `src/svg_converter/handlers/polygons.py`)
- Paths and polygons → Basic shapes: uses shape support (evidence: `src/svg_converter/handlers/polygons.py`)
- Basic shapes → Color parsing: parses colors (evidence: `src/svg_converter/handlers/basic_shapes.py`)
- Text handler → Color parsing: parses colors (evidence: `src/svg_converter/handlers/text.py`)
- Basic shapes → Editable PPTX: creates shapes (evidence: `src/svg_converter/handlers/basic_shapes.py`)
- Paths and polygons → Editable PPTX: creates paths (evidence: `src/svg_converter/handlers/polygons.py`)
