Skip to main content

A library and CLI to convert Markdown to Epub

Project description

md2epub

md2epub is a helper library and CLI tool designed to convert Markdown text into professional, publish-ready EPUB files. It specifically targets formatting standards suitable for KDP (Kindle Direct Publishing), ensuring strict ordering of content (Cover, Title, Copyright, TOC, Dedication, Chapters).

Features

  • Project Scaffolding: Quickly initialize a book directory with a standard structure using Cookiecutter templates.
  • Markdown to EPUB: Converts Markdown content into XHTML with a generated navigation structure.
  • KDP-Ready Styling: Includes a CSS template optimized for e-readers, handling fonts, margins, and scene breaks.
  • Reverse Engineering: Unpack existing EPUB files into a project directory for editing.
  • Custom Formatting: specific support for novel formatting:
  • xxx on a single line creates a centered Scene Break.
  • *** on a single line creates a centered Asterisk Break.

Guide for Writers

1. Installation

Ensure you have Python 3.12 or higher installed.

pip install md2epub

2. Creating a New Book

To start a new project, use the init command. This creates a folder with all the necessary configuration files and templates.

md2epub init my_new_book

You will be prompted for basic details (Book Name, Author Name, Dedications, etc.) which are used to configure the project.

3. Writing Your Content

Navigate to your new book directory. You will see several markdown files (e.g., chapter_01.md, title.md). Write your book using standard Markdown.

Formatting Tips:

  • Chapters: Start chapters with a header # Chapter Title.
  • Scene Breaks: To insert a visible break in the text, place xxx on its own line.
  • Asterisks: To insert a decorative break, place *** on its own line.

4. Configuration (metadata.yaml)

The metadata.yaml file controls the build process. You must list every file you want to include in the EPUB here.

title: "My Great Novel"
author: "Jane Doe"
language: en
cover_image: cover.png
front_matter:
  - title.md
  - copyright.md
  - dedication.md
chapters:
  - chapter_01.md
  - chapter_02.md

5. Compiling the EPUB

When you are ready to generate your book:

md2epub compile my_new_book

This will generate an .epub file in the current directory.

6. Reverse Engineering (Unpacking)

If you have an existing EPUB file that you want to convert into a md2epub project:

md2epub unpack my_book.epub my_project_dir

This will extract the metadata, chapters, and images into my_project_dir, ready for editing and recompilation.


Guide for Developers

Development Setup

  1. Clone the repository.
  2. Install the package in editable mode with development dependencies.
python -m pip install --upgrade pip
pip install -e .[dev]

Running Tests

The project uses pytest for testing. A custom script scripts/run_tests.py is provided to run tests and enforce coverage thresholds.

python scripts/run_tests.py
  • Failure Threshold: The build fails if more than 20% of tests fail.
  • Coverage Threshold:
  • Codebase < 1000 lines: 60% coverage required.
  • Codebase >= 1000 lines: 80% coverage required.

Project Architecture

The codebase follows the SOLID principles, separating concerns into distinct modules:

  • src/md2epub/cli.py: Handles user interaction and commands (init, compile).
  • src/md2epub/epub_builder.py: The core logic class (EpubBuilder) responsible for assembling the book, managing metadata, and ensuring strictly ordered spine items (Cover -> Front Matter -> TOC -> Chapters).
  • src/md2epub/epub_extractor.py: Handles the logic for unpacking EPUB files (EpubExtractor).
  • src/md2epub/converter.py: Handles text processing, converting Markdown to HTML and injecting custom classes for separators.
  • src/md2epub/css_template.py: Contains the KDP_CSS string used to style the EPUB.

Release Workflow

The project uses GitHub Actions for CI/CD.

  • Pull Requests: PRs to main must come from dev.

  • Versioning: Semantic versioning is automated based on PR labels. When a PR is merged to main:

  • Label bump:major → Major increment.

  • Label bump:patch → Patch increment.

  • Default (no label/other) → Minor increment.

  • Publishing: Releases are automatically published to PyPI and GitHub Releases upon merge.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

md2epub-0.3.1.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

md2epub-0.3.1-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file md2epub-0.3.1.tar.gz.

File metadata

  • Download URL: md2epub-0.3.1.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for md2epub-0.3.1.tar.gz
Algorithm Hash digest
SHA256 77c6f47e28c3bc0f6ea51c0bd610304e6124b3727e7b01dbbecb8df68ead282f
MD5 8a1721fdf23c135cf053e17c68c713d8
BLAKE2b-256 7a7c107dc78df3ce5e6160ff95281b3d22c1bb64936788d9179a555c8e058dcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for md2epub-0.3.1.tar.gz:

Publisher: main-release.yml on neolaw84/md2epub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file md2epub-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: md2epub-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for md2epub-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b47323a600f67c1260a7b786fa05db7faf7326ed6d5b814624ca0c9a6208a7b
MD5 92644d86debb90ef31fde82dcb92e25b
BLAKE2b-256 780874f2ebd1bf2238da907215244db6a34d7cc6a6d208a543ee9edcdbdbde57

See more details on using hashes here.

Provenance

The following attestation bundles were made for md2epub-0.3.1-py3-none-any.whl:

Publisher: main-release.yml on neolaw84/md2epub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page