# onlyfart/elib2ebook architecture

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

## Overview

Elib2Ebook is a CLI and web application for downloading books and comics from 100+ online sources, then saving them in one or more ebook formats. The documented workflow is to provide a source URL and download options, retrieve book metadata and selected chapter content through a site-specific getter, and build output files. CLI source confirms initialization, authorization, retrieval, and format-building calls; the web entry point and many adapters/builders were not sampled, so their internal wiring is shown only where supported by the tree or README.

Main entry points: [`src/Elib2EbookCli/Program.cs`](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2EbookCli/Program.cs) (CLI), [`src/Elib2Ebook.DomainServices/Misc/BuilderProvider.cs`](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Misc/BuilderProvider.cs) (Builder provider), [`src/ExternalServices`](https://github.com/onlyfart/elib2ebook/tree/master/src/ExternalServices) (Site getters), [`src/Elib2Ebook.Domain/Book/Book.cs`](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Book.cs) (Book model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry points"]
  node_cli["CLI<br/>[Program.cs]"]
  node_web["Web app<br/>[Program.cs]"]
end

subgraph group_orchestration["Download orchestration"]
  node_options["Download options<br/>[Options.cs]"]
  node_config["Getter config"]
  node_factory["Getter factory<br/>[GetterFactory.cs]"]
  node_getter["Getter base<br/>[GetterBase.cs]"]
end

subgraph group_sources["Source adapters"]
  node_siteadapter["Site getters"]
end

subgraph group_bookdata["Book content"]
  node_book["Book model<br/>[Book.cs]"]
  node_chapter["Chapter model<br/>[Chapter.cs]"]
  node_author["Authors and series<br/>[Author.cs]"]
  node_temp["Temporary files<br/>[TempFile.cs]"]
end

subgraph group_output["Output generation"]
  node_provider["Builder provider<br/>[BuilderProvider.cs]"]
  node_epub["EPUB builder<br/>[EpubBuilder.cs]"]
  node_fb2["FB2 builder<br/>[Fb2Builder.cs]"]
  node_cbz["CBZ builder<br/>[CbzBuilder.cs]"]
  node_json["JSON builders<br/>[JsonBuilder.cs]"]
  node_txt["TXT builder<br/>[TxtBuilder.cs]"]
  node_additional["Additional files"]
end

node_user(("User"))
node_source["Book sites"]
node_saved["Saved files"]

node_user -->|"supplies URL and options"| node_cli
node_user -->|"uses"| node_web
node_cli -->|"parses"| node_options
node_cli -->|"creates"| node_config
node_cli -->|"requests getter"| node_factory
node_factory -->|"selects getter"| node_siteadapter
node_siteadapter -->|"implements"| node_getter
node_siteadapter -->|"requests book data"| node_source
node_siteadapter -->|"returns book"| node_book
node_book -->|"contains chapters"| node_chapter
node_book -->|"includes metadata"| node_author
node_book -->|"references files"| node_temp
node_cli -->|"initializes and authorizes"| node_getter
node_cli -->|"retrieves book"| node_siteadapter
node_cli -->|"requests format builder"| node_provider
node_provider -->|"dispatches"| node_epub
node_provider -->|"dispatches"| node_fb2
node_provider -->|"dispatches"| node_cbz
node_provider -->|"dispatches"| node_json
node_provider -->|"dispatches"| node_txt
node_cli -.->|"builds optional files"| node_additional
node_epub -->|"writes ebook"| node_saved
node_fb2 -->|"writes ebook"| node_saved
node_cbz -->|"writes comic archive"| node_saved
node_json -->|"writes JSON"| node_saved
node_txt -->|"writes text"| node_saved
node_additional -.->|"writes attachments"| node_saved

click node_cli "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2EbookCli/Program.cs"
click node_web "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2EbookWeb/Program.cs"
click node_options "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Configs/Options.cs"
click node_config "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Configs/BookGetterConfig.cs"
click node_factory "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Misc/GetterFactory.cs"
click node_getter "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Getters/GetterBase.cs"
click node_siteadapter "https://github.com/onlyfart/elib2ebook/tree/master/src/ExternalServices"
click node_book "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Book.cs"
click node_chapter "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Chapter.cs"
click node_author "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Author.cs"
click node_temp "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Common/TempFile.cs"
click node_provider "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Misc/BuilderProvider.cs"
click node_epub "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/EpubBuilder.cs"
click node_fb2 "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/Fb2Builder.cs"
click node_cbz "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/CbzBuilder.cs"
click node_json "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/JsonBuilder.cs"
click node_txt "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/TxtBuilder.cs"
click node_additional "https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/AdditionaFileBuilder.cs"

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_web,node_user toneBlue
class node_options,node_config,node_factory,node_getter toneAmber
class node_siteadapter toneMint
class node_book,node_chapter,node_author,node_temp toneRose
class node_provider,node_epub,node_fb2,node_cbz,node_json,node_txt,node_additional,node_source,node_saved toneIndigo
```

## Components

### User entry points

- [CLI](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2EbookCli/Program.cs): `src/Elib2EbookCli/Program.cs`
- [Web app](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2EbookWeb/Program.cs): `src/Elib2EbookWeb/Program.cs`

### Download orchestration

- [Download options](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Configs/Options.cs): `src/Elib2Ebook.DomainServices/Configs/Options.cs`
- [Getter config](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Configs/BookGetterConfig.cs): `src/Elib2Ebook.DomainServices/Configs/BookGetterConfig.cs`
- [Getter factory](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Misc/GetterFactory.cs): `src/Elib2Ebook.DomainServices/Misc/GetterFactory.cs`
- [Getter base](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Getters/GetterBase.cs): `src/Elib2Ebook.DomainServices/Getters/GetterBase.cs`

### Source adapters

- [Site getters](https://github.com/onlyfart/elib2ebook/tree/master/src/ExternalServices): `src/ExternalServices`

### Book content

- [Book model](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Book.cs): `src/Elib2Ebook.Domain/Book/Book.cs`
- [Chapter model](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Chapter.cs): `src/Elib2Ebook.Domain/Book/Chapter.cs`
- [Authors and series](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Book/Author.cs): `src/Elib2Ebook.Domain/Book/Author.cs`
- [Temporary files](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.Domain/Common/TempFile.cs): `src/Elib2Ebook.Domain/Common/TempFile.cs`

### Output generation

- [Builder provider](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Misc/BuilderProvider.cs): `src/Elib2Ebook.DomainServices/Misc/BuilderProvider.cs`
- [EPUB builder](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/EpubBuilder.cs): `src/Elib2Ebook.DomainServices/Builders/EpubBuilder.cs`
- [FB2 builder](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/Fb2Builder.cs): `src/Elib2Ebook.DomainServices/Builders/Fb2Builder.cs`
- [CBZ builder](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/CbzBuilder.cs): `src/Elib2Ebook.DomainServices/Builders/CbzBuilder.cs`
- [JSON builders](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/JsonBuilder.cs): `src/Elib2Ebook.DomainServices/Builders/JsonBuilder.cs`
- [TXT builder](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/TxtBuilder.cs): `src/Elib2Ebook.DomainServices/Builders/TxtBuilder.cs`
- [Additional files](https://github.com/onlyfart/elib2ebook/blob/master/src/Elib2Ebook.DomainServices/Builders/AdditionaFileBuilder.cs): `src/Elib2Ebook.DomainServices/Builders/AdditionaFileBuilder.cs`

### Other components

- **User**
- **Book sites**
- **Saved files**

## Connections

- User → CLI: supplies URL and options
- User → Web app: uses
- CLI → Download options: parses
- CLI → Getter config: creates
- CLI → Getter factory: requests getter
- Getter factory → Site getters: selects getter
- Site getters → Getter base: implements
- Site getters → Book sites: requests book data
- Site getters → Book model: returns book
- Book model → Chapter model: contains chapters
- Book model → Authors and series: includes metadata
- Book model → Temporary files: references files
- CLI → Getter base: initializes and authorizes
- CLI → Site getters: retrieves book
- CLI → Builder provider: requests format builder
- Builder provider → EPUB builder: dispatches
- Builder provider → FB2 builder: dispatches
- Builder provider → CBZ builder: dispatches
- Builder provider → JSON builders: dispatches
- Builder provider → TXT builder: dispatches
- CLI → Additional files: builds optional files
- EPUB builder → Saved files: writes ebook
- FB2 builder → Saved files: writes ebook
- CBZ builder → Saved files: writes comic archive
- JSON builders → Saved files: writes JSON
- TXT builder → Saved files: writes text
- Additional files → Saved files: writes attachments
