Skip to content

DostLeFan/Booker

Repository files navigation

Booker

Booker is a native and extensible toolkit for ebooks and comic archives written in C++17.

It focuses on conversion, processing and future lightweight library management, while keeping both CLI and GUI as first-class citizens.

[Development License: GPL v3 Release CI Status CI Language CMake C++17

Table of Contents

Philosophy

Booker is built around a simple idea:

ebook tools should adapt to users, not the opposite.

The project started from real-world needs: converting and processing PDF, CBZ and CBR files quickly and cleanly.

Over time, Booker aims to evolve into a modular ecosystem for ebook and comic workflows, including lightweight library management and community-driven extensions.

Booker is designed to remain:

  • native
  • modular
  • extensible
  • cross-platform
  • usable from both CLI and GUI

Current Status

Booker is currently in early development.

The current focus is:

  • archive handling
  • conversion pipelines
  • core architecture
  • CLI/GUI foundations

Supported formats and functionalities are still evolving.

Features

Current

  • CBZ support
  • CBR support
  • PDF support
  • Archive abstraction layer
  • Shared core between CLI and GUI

Planned

  • EPUB support
  • Metadata handling
  • Batch processing
  • Lightweight library management
  • Future plugin system
  • GUI (library is not decided)

Dependencies

Dependencies are managed by CMake, with FetchContent and ExternalProject, so, if you are on Windows, MacOS, or Linux (Ubuntu is OK for build, not built for other distributions), you don't have to manage them.

But, there is a list of the dependencies used, and why :

  • Zlib : Useful for some other dependencies, and for compress and deflate zip for CBZ archives
  • libjpeg (and libjpeg-turbo) : Useful for Poppler and take in charge a part of JPEG workflows
  • Freetype : Useful for Poppler
  • LibPNG : Useful for Poppler
  • Iconv (and win-iconv for Windows) : Useful for Poppler
  • Poppler : To read PDF and rasterization of pages
  • RarLib : My own wrapper around RAR executables ; to compress CBR archives
  • libarchive : To deflate CBR archives
  • imageinfo : To get images width and height
  • LibHaru : To write PDF
  • stb_image and stb_image_write : To help libjpeg
  • libwebp : To take in charge WEBP format
  • pugixml : To manage ComicInfo.xml of CBR and CBZ (comic metadata)
  • CLI11 : To create a CLI interface

Architecture

Booker is organized around a shared core architecture:

Booker/
├── core/          # Shared library: archive handling, document model, format handlers, and other logic features
│   ├── include/   # Public headers (booker namespace)
│   └── src/       # Implementations
├── cli/           # Command-line interface (uses core)
├── gui/           # GUI application (uses core)
├── locales/       # Localization files (future feature)
└── CMakeLists.txt # Root build configuration

Build

About build

CMake take in charge the dependencies listed above. So, the first build is very slow (around 10~15 minutes). Don't be afraid by that, it's normal.

Requirements

  • C++17 compiler (MSVC, MinGW, GCC, Clang)
  • CMake
  • Git

Cross-platform build commands

git clone https://github.com/DostLeFan/Booker.git
cd Booker

# And then, use these two commands :
# The two presets are build and release
cmake --preset YOUR_PRESET -G "YOUR_GENERATOR"
cmake --build --preset YOUR_PRESET

# For example, on Linux
cmake --preset debug -G "Unix Makefiles"
cmake --build --preset debug

Usage

CLI

The project is currently running with a minimal command-line interface.

At present, it allows you to convert between CBR, CBZ and PDF formats (CBR->CBZ, CBR->PDF, CBZ->CBR, CBZ->PDF, PDF->CBR, PDF->CBZ).

Conversions may be slow in some cases, as they have not yet been optimised.

But here are a few examples of how to use it:

booker_cli file [FILE_TO_CONVERT].[cbr/cbz/pdf] [OUTPUT_FILE].[cbr/cbz/pdf] [--dpi] # The CLI will automatically detect formats and convert with correct algorithm
# DPI is optional and defaults to 300

# For example :

booker_cli file "Booker - Sample PDF.pdf" "Booker - Sample PDF.cbz" [--dpi 150] # This file, "Booker - Sample PDF.pdf", can be found in "sample data/" directory.

# And, if you want batch conversion :

booker_cli directory [DIRECTORY_CONTAINING_EBOOKS] -d/--destination [OUTPUT_DIRECTORY] -f/--format [cbr/cbz/pdf] [--dpi 200]

# For example :

booker_cli directory yourDirectory -d yourOutputDirectory -f pdf [--dpi 200]

GUI

GUI isn't developed yet ; the GUI library isn't decided. But, in the future, this part will be documented.

Roadmap

There is a minimal roadmap for future developments.

Core

  • ZIP handling
  • RAR handling
  • Metadata abstraction

Conversion

  • CBZ -> CBR
  • CBZ -> PDF
  • CBR -> CBZ
  • CBR -> PDF
  • PDF -> CBZ
  • PDF -> CBR
  • Basic batch conversion
  • Better design for single file and batch conversion for CLI

Ecosystem

  • Plugin system
  • Lightweight library management

Contributing

Booker is community-driven.

Feature ideas, discussions and contributions are welcome, but the project aims to remain coherent, modular and maintainable.

Before implementing large features, please open an issue or discussion first.

License

Copyright (C) 2026 DostLeFan. This software is distributed under the terms of the GNU General Public License v3 or later.

About

A C++17 software to manage ebooks.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages