本文主要内容

RT,具体来讲是在Ubuntu22.04纯命令行环境下的docker + docker-compose + nginx proxy manager + komga的部署,再配合任意平台python环境下的bangumikomga使用配置教程。因此本文不会涉及在群晖等gui docker的配置,但是如果ssh进群晖的话理论上操作还是通用的,还请有兴趣的各位自行尝试,翻车了别找我就是。

本文涉及的项目链接

前言

时过境迁,当年写得乱七八糟得Docker+Komga现在有点不堪入目,加上Komga这两年之间的更新内容挺多,包括之前被我自己实际使用中诟病的AVIF支持跟RAR5支持都已经加上,再加上近期了解到BangumiKomga刮削工具的存在,试用之后决定单独开一篇来写专门写Komga,这样看起来也更加方便。那么废话不多说,开干。

Docker&Docker-compose安装

首先我们还是得把Docker跟Docker-compose给装好,这是一切的基础。

这一部分的安装流程没变,所以可以直接参照:Docker快速部署私人云相册+同人音声库+漫画库+网盘+保种盒+Plex – 第 2 页 – 白磷茶室 (hakur.in)

NPM反代部署配置

NPM反代是为了给自己的Komga绑定上域名,因为自己的是公网服务器,使用https能够确保安全性也能蹭到cf,如果没有事先准备好的域名,或者只是内网使用Komga可以跳过这一部分。

这一部分的安装配置流程也没变,直接参照:Docker快速部署私人云相册+同人音声库+漫画库+网盘+保种盒+Plex – 第 3 页 – 白磷茶室 (hakur.in)

Komga部署配置

  • 当上面的基础环境配置好了之后,我们直接开写docker-compose.yml
version: '3.3'
services:
  komga:
    image: gotson/komga
    container_name: komga
    volumes:
      - type: bind
        #下方需要修改,例:/home/komga/config
        source: /path/to/config
        target: /config
      - type: bind
        #下方需要修改,这个是你的漫画文件保存路径,例:/home/transmission/downloads/manga
        source: /path/to/data
        target: /data
      - type: bind
        source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
        target: /etc/timezone
        read_only: true
    ports:
      - 25600:25600 #新版端口改成了25600,没什么影响
    user: "1000:1000"
    # remove the whole environment section if you don't need it
    # 下面两行额外的环境变量行,用不着,直接删除或者注释掉
    # environment:
    #   - <ENV_VAR>=<extra configuration> 
    restart: unless-stopped

# 添加之前创建的网络
networks:
  default:
    external: true
    name: nginx-proxy
  • 启动容器
docker-compose up -d
  • 如果你没打算配域名,那么现在已经可以使用http://IP:25600来访问你的Komga了
  • 如果你打算配域名,那么请在NPM里面配置好Nginx反代,参照刚刚部署配置NPM的流程来注释掉docker-compose.yml里的25600端口,更新容器,至此Komga部署和配置完成,下面我们来讲讲刮削器怎么用。

BangumiKomga部署配置

在整理漫画库存的时候,偶尔在站内发现有人提起这个问题,本来嘛,只是看漫画而已,刮削信息什么的如果纯手动的话确实有点嫌时间太多了,但是如果有这个脚本的话,跑一下就能刮到八九不离十的信息就比较值得去用了,毕竟信息刮好的漫画封面墙真的很好看。

刮削完成之后的整体效果,利好强迫症
刮削完成之后的整体效果,利好强迫症
单个系列的效果,bgm的信息还是全

在项目readme里面的快速开始我觉得写得不够快速,主要是config.py的指引读起来有点费劲,直接上实例config来说明,也当作自己做笔记方便后面换设备了再起来一遍。

漫画命名建议

首先,请确保你漫画库里的资源命名遵照这里chu-shen/BangumiKomga: A Metadata Provider for Komga using Bangumi (github.com)提到的格式,也就是[漫画名称][作者][出版社][卷数][其他1][其他2]的格式,不然在匹配上可能会出现大差错,这是使用该脚本的前提。

第一次运行

  • 环境配置没什么好说的,请参照官方的readme来配置好,Komga版本尽量保持最新,这里用的是1.10.0,这个版本加入了对RAR5压缩包的支持,喜大普奔
  • 然后我们来填config.py,文件在config文件夹下面,请复制一份config.template.py然后改名改成config.py,然后按照下面的提示填写
# get access token from: https://next.bgm.tv/demo/access-token

BANGUMI_ACCESS_TOKEN = '去上面的地址登入创建,查询r-18刊物的时候才需要用到'
KOMGA_BASE_URL = "服务器地址,注意不要带后面的斜杠"
KOMGA_EMAIL = "Komga登入邮箱"
KOMGA_EMAIL_PASSWORD = "Komga登入密码"
FORCE_REFRESH_LIST = []
KOMGA_LIBRARY_LIST = ['填入整个库的id',]
KOMGA_COLLECTION_LIST = []

# 按需改True,第一次润的时候全部保持False即可
RECHECK_FAILED_SERIES = False
RECHECK_FAILED_BOOKS = False

# 创建刮削失败收藏,大概用不着
CREATE_FAILED_COLLECTION = False

# ……后面的可以无视
  • 填好之后就可以润refreshMetadata.py了,然后转到生成的refreshMetadata.log观察是否正常运行,如果一切正常,运行完成之后Komga库里所有的信息都会刮削好。

修正错误元数据/匹配失败的书籍

这里使用的是项目里面提到的cbl功能,也就是手动指定bgm.tv的链接来让脚本来爬取信息。

  • 首先在匹配错误/没匹配到的书籍系列中,编辑新增一个链接
如图,修改匹配失败的书籍系列的链接信息,标签填写“cbl”,URL指定的是bgm里对应的主页链接,然后保存修改
  • 然后我们来修改config.py
# ……前面的保持不变

FORCE_REFRESH_LIST = ['填入刚刚这本失败书籍/系列在Komga里的id', '如果有多本,那就继续填写',]
KOMGA_LIBRARY_LIST = ['填入整个库的id',]
KOMGA_COLLECTION_LIST = []

# 改True
RECHECK_FAILED_SERIES = True
RECHECK_FAILED_BOOKS = False

# ……后面的可以无视
  • 填好之后就可以润refreshMetadata.py了,这个时候脚本就会按照你手动填写的bgm链接来重新匹配信息。

以上是这个工具的基本配置和运行,感谢工具作者写了个这么方便的强迫症友好工具,接下来让我们把刮削好的库丢去晒吧(不是),祝大家漫画阅读愉快!

一些题外话/实用技巧

  • 批量单独打包文件夹内的复数文件夹的bash/shell命令

如果你觉得这小标题很绕,没错我也觉得,不如直接看图

蓝色的是散装文件夹,红色的是分别打zip包,这条命令能一键分别打zip包,完

如果凑巧你也是从nyaa的mangaroo那边拿日语资源的话,你会发现他的资源都是以文件夹装001.avif、002.avif类似这种散装形式来上传的,也就意味着Komga不能直接识别。然后正常来讲我们会把一个系列好几卷的漫画全都下载到一个文件夹(这个文件夹按照BangumiKomga的命名规则来命名),于是我们剩下要做的只是将里面的分卷文件夹分别打包压缩就可以了,但是面对动则十几二十卷的漫画一卷一卷来明显很费劲,于是有了以下命令。

首先我们cd进这个系列漫画的文件夹,默认复数的卷数文件夹都已经按[漫画名][卷数]之类的形式命名(理论上有卷数就够了),然后我们只需要在bash里跑这一条命令:

for i in */; do zip -r "${i%/}.zip" "$i"; done

等待压缩完成,就可以去Komga里面扫描库导入了~

  • AVIF vs JPEG
JPG:像素5.7MP、文件大小1.3MB、单卷文件大小257.5MB
AVIF:像素1.8MP、文件大小113kB、单卷文件大小20.8MB

有空再唠嗑下AVIF这对比JPEG的35%的压缩率对文件保存和网络传输是多么的友好。

关于格式兼容性,因为AVIF/AV1都是谷歌的东西,所以安卓端的支持肯定是没有问题的。至于苹果,忘了Ios/Macos支不支持AVIF来着,之前看了官方的客户端好像是不支持的,但是服务端支持的话客户端是什么表现也不清楚,暂且认为苹果不支持吧。

以上面狐仙大人的这一页为例,如果在平板/电脑这种稍大的屏幕上看,因为AVIF那套的分辨率大概是JPG那套的三分之一,因此线条是没有JPG那套观感上锐利的,这个是分辨率或者说源的区别。然后JPG那套是供给蜀黍的源,阴影是上的网纹点,AVIF那套淡的阴影是用的灰度填充,其实在电子设备在观看的话灰度填充会比网纹点观感要好,不会因为设备缩放出现奇怪的纹,不过这个也是源的差距了,跟AVIF和JPEG的压缩率没什么关系,如果你是用的手机看漫画,这两页基本上没有观感上的差距。

假设这是一个公开的服务器,很明显,一卷250MB跟一卷20MB的大小,对服务器水管的压力会很不一样,这点在自用的时候看页面加载速度就能感觉出来,一页120kB跟一页1.3MB在服务器带宽不充裕的情况下可能就是10倍的加载速度的区别,对阅读体验会有显著影响。另外就是寸土寸金的服务器硬盘了,用AVIF无疑同一套漫画能省下三分之一的空间,这点对于运营来说值得考量。