# epub-to-manga
Convert EPUB novels into manga-style EPUBs using a local LLM for scene parsing and Stable Diffusion for image generation.
## How it works
1. Reads your EPUB and splits the text into scenes
2. Uses an Ollama LLM to parse each scene — extracting characters, dialogue, mood, and setting
3. Generates a manga-style illustration for each page via Stable Diffusion
4. Adds speech bubbles with character dialogue
5. Packages everything into a new EPUB
## Requirements
- Python 3.10+
- [Ollama](https://ollama.com) running locally
- One of the following Stable Diffusion backends:
- [AUTOMATIC1111 stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui)
- [ComfyUI](https://github.com/comfyanonymous/ComfyUI) *(recommended for Apple Silicon)*
- [InvokeAI](https://github.com/invoke-ai/InvokeAI)
## Installation
```bash
pip install -r requirements.txt
```
Pull an Ollama model:
```bash
ollama pull llama3
```
## Usage
```bash
python3 main.py book.epub
python3 main.py book.epub output.epub
python3 main.py book.epub --layout tiny --model mistral
python3 main.py book.epub --sd-url http://192.168.1.10:7860 --steps 30 --size 512x768
python3 main.py book.epub --dry-run
```
If no Stable Diffusion backend is running, the tool will detect any local installations and offer to launch or install one for you.
## Options
| Flag | Default | Description |
|---|---|---|
| `--layout` | `normal` | `normal` = 3 scenes/page, `tiny` = 1 scene/page |
| `--model` | `llama3` | Ollama model for scene parsing |
| `--ollama-url` | `http://localhost:11434` | Ollama API URL |
| `--sd-url` | `http://127.0.0.1:7860` | Stable Diffusion API URL |
| `--sd-path` | — | Path to SD install; auto-starts if not running |
| `--steps` | `20` | Diffusion steps per image (higher = better quality) |
| `--style` | `lineart` | `lineart` = clean outlines, `manga` = screentone shading |
| `--size` | `768x1024` | Output image dimensions |
| `--workers` | `2` | Parallel image generation workers |
| `--hint` | — | Character description, e.g. `--hint "Rocky:alien who resembles a rock spider"` |
| `--jpeg-quality` | `85` | EPUB image quality (1–95, lower = smaller file) |
| `--dry-run [N]` | — | Preview first N prompts without generating images |
| `--verbose` / `-v` | — | Enable debug logging |
## Configuration
Default URLs and model can be changed in `config.py`:
```python
OLLAMA_URL = "http://localhost:11434/api/generate"
OLLAMA_MODEL = "llama3"
SD_API_URL = "http://127.0.0.1:7860/sdapi/v1/txt2img"
```
The tool saves its SD backend path to `~/.epub-to-manga` so you don't need `--sd-path` on subsequent runs.
## Resuming
Scene parsing and image generation both support resuming. Parsed scenes are cached to `manga-.cache.json`, and generated page images are saved to `