# bariskisir/imageconverter architecture

> Architecture diagram of the GitHub repository bariskisir/imageconverter, 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/bariskisir/imageconverter
- Repository: https://github.com/bariskisir/imageconverter

## Overview

ImageConverter is a Node.js CLI and programmatic image-conversion library. A user supplies a file or directory, target format, and optional output, recursion, and quality settings; the CLI delegates to the converter, which validates and discovers inputs, prepares format-specific images, writes converted outputs, and reports progress. The README also documents batch and recursive conversion. The converter excerpt is partial, so the graph shows only integrations and relationships supported by the available source and documentation.

Main entry points: [`src/core/converter.ts`](https://github.com/bariskisir/imageconverter/blob/master/src/core/converter.ts) (Conversion coordinator), [`src/cli.ts`](https://github.com/bariskisir/imageconverter/blob/master/src/cli.ts) (CLI commands), [`src/index.ts`](https://github.com/bariskisir/imageconverter/blob/master/src/index.ts) (Public API), [`src/core/paths.ts`](https://github.com/bariskisir/imageconverter/blob/master/src/core/paths.ts) (Discovery and paths)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and API"]
  node_cli["CLI commands<br/>[cli.ts]"]
  node_api["Public API<br/>[index.ts]"]
end

subgraph group_workflow["Conversion workflow"]
  node_converter["Conversion coordinator<br/>[converter.ts]"]
  node_formats["Format validation<br/>[formats.ts]"]
  node_paths["Discovery and paths<br/>[paths.ts]"]
  node_logger["Terminal reporting<br/>[logger.ts]"]
end

subgraph group_media["Image processing"]
  node_sharp["Sharp encoder"]
  node_jimp["Jimp image handling"]
  node_ico_decode["ICO decoder"]
  node_ico_encode["PNG to ICO"]
end

node_user(("User"))
node_filesystem["Local filesystem"]

node_user -->|"runs with options"| node_cli
node_cli -->|"delegates input"| node_converter
node_user -.->|"calls API"| node_api
node_api -->|"exports conversion"| node_converter
node_converter -->|"validates formats"| node_formats
node_converter -->|"discovers and maps"| node_paths
node_converter -->|"reads and writes"| node_filesystem
node_paths -->|"scans directories"| node_filesystem
node_converter -->|"encodes images"| node_sharp
node_converter -->|"handles BMP and ICO"| node_jimp
node_converter -->|"decodes ICO input"| node_ico_decode
node_converter -->|"encodes ICO output"| node_ico_encode
node_cli -->|"reports errors"| node_logger
node_converter -->|"reports progress"| node_logger

click node_cli "https://github.com/bariskisir/imageconverter/blob/master/src/cli.ts"
click node_api "https://github.com/bariskisir/imageconverter/blob/master/src/index.ts"
click node_converter "https://github.com/bariskisir/imageconverter/blob/master/src/core/converter.ts"
click node_formats "https://github.com/bariskisir/imageconverter/blob/master/src/core/formats.ts"
click node_paths "https://github.com/bariskisir/imageconverter/blob/master/src/core/paths.ts"
click node_logger "https://github.com/bariskisir/imageconverter/blob/master/src/infrastructure/logger.ts"

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_cli,node_api,node_user toneBlue
class node_converter,node_formats,node_paths,node_logger toneAmber
class node_sharp,node_jimp,node_ico_decode,node_ico_encode toneMint
class node_filesystem toneIndigo
```

## Components

### CLI and API

- [CLI commands](https://github.com/bariskisir/imageconverter/blob/master/src/cli.ts): `src/cli.ts`
- [Public API](https://github.com/bariskisir/imageconverter/blob/master/src/index.ts): `src/index.ts`

### Conversion workflow

- [Conversion coordinator](https://github.com/bariskisir/imageconverter/blob/master/src/core/converter.ts): `src/core/converter.ts`
- [Format validation](https://github.com/bariskisir/imageconverter/blob/master/src/core/formats.ts): `src/core/formats.ts`
- [Discovery and paths](https://github.com/bariskisir/imageconverter/blob/master/src/core/paths.ts): `src/core/paths.ts`
- [Terminal reporting](https://github.com/bariskisir/imageconverter/blob/master/src/infrastructure/logger.ts): `src/infrastructure/logger.ts`

### Image processing

- **Sharp encoder**
- **Jimp image handling**
- **ICO decoder**
- **PNG to ICO**

### Other components

- **User**
- **Local filesystem**

## Connections

- User → CLI commands: runs with options
- CLI commands → Conversion coordinator: delegates input
- User → Public API: calls API
- Public API → Conversion coordinator: exports conversion
- Conversion coordinator → Format validation: validates formats
- Conversion coordinator → Discovery and paths: discovers and maps
- Conversion coordinator → Local filesystem: reads and writes
- Discovery and paths → Local filesystem: scans directories
- Conversion coordinator → Sharp encoder: encodes images
- Conversion coordinator → Jimp image handling: handles BMP and ICO
- Conversion coordinator → ICO decoder: decodes ICO input
- Conversion coordinator → PNG to ICO: encodes ICO output
- CLI commands → Terminal reporting: reports errors
- Conversion coordinator → Terminal reporting: reports progress
