1.搭建

KOMGA 是一个自托管的 漫画/电子书管理系统,类似于 Jellyfin 之于电影,支持 网页、手机、平板等设备 访问,适合管理本地漫画资源。

Komga 主要支持以下几种格式:

  • CBZ (Comic Book Zip)
  • CBR (Comic Book Rar)
  • PDF
  • EPUB
  • CB7 (Comic Book 7z)
  • ComicBook Archive (ZIP/RAR/7z等归档格式)

🛠 KOMGA Docker-Compose 搭建

1️⃣ 编写 docker-compose.yml

在服务器上创建 docker-compose.yml 文件,并填入以下内容:

version: "3.8"
services:
  komga:
    image: gotson/komga:latest
    container_name: komga
    restart: unless-stopped
    ports:
      - "25600:25600"
    environment:
      - TZ=Asia/Shanghai  # 时区
    volumes:
      - /你的路径/config:/config      # 配置存储
      - /你的路径/komga:/data          # 你的漫画存放目录

2️⃣ 运行容器

在 docker-compose.yml 所在目录,运行:

docker-compose up -d

容器启动后,访问 http://服务器IP:8080 进行管理。


📌 额外配置

🔹 设置用户密码

默认情况下,KOMGA 无需登录。如果你希望设置 用户认证,可以:

  1. 首次访问 http://服务器IP:8080
  2. 在 设置 中 创建管理员账户

📌 其他功能

✅ 支持 EPUB、CBZ、CBR 格式漫画
✅ 自动扫描新增漫画
✅ 支持 Web 端 & 移动端阅读
✅ 支持 OPDS,配合第三方 APP 使用


💡 适合搭建在 NAS 或服务器上,配合 Jellyfin、Alist,打造全家桶! 🚀

https://kxo.moe/ 下载限制

 

2.格式转换

可以用 Python 来将 MOBI 文件转换为 EPUB 文件。有几个库可以帮助你完成这个任务,其中最常用的是 ebooklib 和 calibre 的命令行工具(如果已安装 Calibre)。

方法一:使用 calibre 的命令行工具 (推荐)

如果你的系统上已经安装了 Calibre,最简单的方法是使用它的命令行工具 ebook-convert。这是一个非常强大的转换工具,支持各种格式之间的转换。
下载地址:https://calibre-ebook.com/

import subprocess
import os

def convert_mobi_to_epub_calibre(mobi_path, epub_path):
    """
    使用 Calibre 的 ebook-convert 命令行工具将 MOBI 转换为 EPUB。

    Args:
        mobi_path: MOBI 文件的路径。
        epub_path: 输出 EPUB 文件的路径。
    """
    try:
        if not os.path.exists(mobi_path):
            raise FileNotFoundError(f"MOBI file not found: {mobi_path}")

        subprocess.run(['ebook-convert', mobi_path, epub_path], check=True, capture_output=True)
        print(f"Successfully converted {mobi_path} to {epub_path}")

    except subprocess.CalledProcessError as e:
        print(f"Error during conversion: {e.stderr.decode()}")
    except FileNotFoundError as e:
       print(e)
    except Exception as e:
        print(f"An unexpected error occurred: {e}")



# 示例用法:
convert_mobi_to_epub_calibre('input.mobi', 'output.epub')

使用遍历文件,批量转换,然后删除源文件

import subprocess
import os

def convert_mobi_to_epub_calibre(mobi_path, epub_path):
    """
    使用 Calibre 的 ebook-convert 命令行工具将 MOBI 转换为 EPUB。

    Args:
        mobi_path: MOBI 文件的路径。
        epub_path: 输出 EPUB 文件的路径。
    """
    try:
        if not os.path.exists(mobi_path):
            raise FileNotFoundError(f"MOBI file not found: {mobi_path}")

        subprocess.run(['ebook-convert', mobi_path, epub_path], check=True, capture_output=True)
        print(f"Successfully converted {mobi_path} to {epub_path}")
        return True
    except subprocess.CalledProcessError as e:
        print(f"Error during conversion: {e.stderr.decode()}")
    except FileNotFoundError as e:
       print(e)
    except Exception as e:
        print(f"An unexpected error occurred: {e}")


# input_path = r"Z:\share\komga\金田一少年事件簿第一部明智系列\[Vol.moe][金田一少年事件簿第一部明智系列]優雅犀利事件簿.mobi"
# output_path = r"Z:\share\komga\金田一少年事件簿第一部明智系列\[Vol.moe][金田一少年事件簿第一部明智系列]優雅犀利事件簿.epub"
# 示例用法:

main_path = r'Z:\share\komga'
for root, dirs, files in os.walk(main_path):
    for file in files:
        if file.endswith('.mobi'):
            mobi_path = os.path.join(root, file)
            epub_path = os.path.splitext(mobi_path)[0] + '.epub'
            ret = convert_mobi_to_epub_calibre(mobi_path, epub_path)
            if ret:
                os.remove(mobi_path)
                

方法二: 使用PyMuPDF

import fitz

def convert_mobi_to_epub_with_pymupdf(mobi_path, epub_path):

    doc = fitz.open(mobi_path)
    doc.save(epub_path, garbage=4, deflate=True)
    doc.close()

convert_mobi_to_epub_with_pymupdf("in.mobi", "out.epub")

解释和建议:

  • Calibre 命令行 (推荐): 这是最简单、最可靠的方法。Calibre 在处理电子书格式方面非常出色,转换质量通常很高。
  • PyMuPDF (简单,但可能有局限): PyMuPDF可以打开MOBI文件, 并直接另存为EPUB. 但转换效果可能不如Calibre.
  • 安装:
    • ebooklibpip install ebooklib
    • calibre: 从 Calibre 官网下载并安装 (https://calibre-ebook.com/)
    • PyMuPDF: pip install pymupdf

总结:
如果已安装Calibre,强烈推荐使用 ebook-convert 命令行工具。如果没有安装Calibre, 可以使用PyMuPDF。如果需要对转换过程有更精细的控制,或者有特殊需求,可以考虑使用 ebooklib,但需要更多的工作。