Komga
简介¶
漫画或者PDF的jellyfin版本 , 类似的还有 基于docker的smanga
选择¶
Rather than browse rouman online, high-resolution pivix pictures seems more worthy to be downloaded and maintained.
But first you need a much bigger NAS.
安装¶
- 通过Docker安装(Docker on Windows 体验不好)
- 通过java运行
Windows¶
- 由于在portainer.io里路径有问题,选择直接在docker里点击
image run
创建容器。 - 如果输入数据来源多,建议设置子目录
data/1
anddata/2
。 and Please think carefully because restart container will triger the following bugs:
But docker on Windows remains many bugs:
- Failed to restart the docker engine
- deadlock between first free volume to delete container and first stop already stepped container to free related volume.
Linux docker¶
In http://brainiac.acsalab.com:2333/
step1: map remote data to local visual disk¶
- map windows disk to linux
- map Nas disk to linux
sudo mount.cifs //synology.acsalab.com/Entertainment /synology -o user=xxx vers=3.0
Step2 : docker¶
采取第一种, 在 portainer.io的local的stack里使用docker compose
部署
---
version: '3.3'
services:
komga:
image: gotson/komga
container_name: komga
volumes:
- type: bind
source: /mnt/e/commonSoftware/komga/config # Database and Komga configurations
target: /config
- type: bind
source: /mnt/e/commonSoftware/komga/data # Location of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work.
target: /data/komga
- type: bind
source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
target: /etc/timezone
read_only: true
ports:
- 2333:8080 # 应用内部的 8080 到机器的2333端口。由于机器的8080被qBit占用了
user: "1000:1000"
# remove the whole environment section if you don't need it
environment:
- <ENV_VAR>=<extra configuration>
restart: unless-stopped
Docker in Ugreen Nas¶
- easy pull official
komga
image - set mount disk
- set port
komga V.S. smanga V.S Kavita¶
- exhentai-manga-manager only on widnows
- smanga,
- 优点: 1. 带标签和收藏,维持三级目录, 2. 独特的目录设计。
- 缺点: 1. png读取正常,但是zip解压过于缓慢 2. PDF的支持暂时欠缺: 1. 无法阅读 2. PDF阅读与decompress的冲突 3. 元数据不能自由编辑,只能编辑标签。 4. 不能读取根目录的文件,但是能选择单行本,或许可以解决这个问题,但是需要尝试。 5. 无法读到过深的文件夹。
- 小结:本来寄希望于这个all in one, 但是问题太多,还是只适合刮削好的资源。 可以不断完善和尝试。
- 举例:所有韩漫,
- Kavita
- 优点: 1. 纯zip文件能读到深处的文件夹 2. 日漫带标签和收藏,有缩略图。 3. 元数据能自由编辑
- 缺点: 1. 奇怪的文件名识别规则,导致 2. 杂乱的类型(zip, png, pdf)会导致目录混乱 3. 不能读取根目录的文件
- 小结:适合高度组织过后的内容
- 举例:2022单行本,零散日漫单行本。和calibre处理后的文件。
- komga
- 优点: 1. 维持原始目录结构,稳定简洁。 2. 元数据能自由编辑 3. 根目录文件能识别
- 缺点: 1. 没有收藏,保存和标签等功能,不适合碎片化连续看。
- 小结:适合混乱的内容,靠文件夹的并列和包含关系,维护逻辑关系。
- 举例:杂志(没有子文件夹包裹,识别不了),漫之学院(太大),日漫大合集(混乱的结构)
需要图书/漫画刮削
dockers | komga | smanga | Kavita |
---|---|---|---|
单一大PDF文件加载 | 缓慢 | 缓慢 | |
格式支持 | zip,cbz,pdf | 部分zip不支持bug,不支持cbz | zip,pdf ,cbz |
如何支持单文件夹多图片 | 每个文件夹单独压缩成zip反而支持 | ||
自定义元数据 | |||
任意位置标签 | |||
已知bug | 容器会自动关机(有待进一步测试) | ||
总体评价 | 基础完善稳定,但是定制化不足 | 有用的定制化 | 全,但是不维持原目录有点恶心,导致必须按照类型整理。 |
Manga vs comic
"Manga" 和 "comic" 是两个术语,通常用于描述不同地区和文化中的漫画,其中 "manga" 常用于日本漫画,而 "comic" 通常用于西方漫画,包括美国漫画。
- Manga(漫画):
- 地域: "Manga" 是日本的一种漫画形式,是日本漫画的通用术语。
-
特点: Manga 的特点包括从右到左的阅读顺序,经常包含有关日本文化和社会的元素,以及广泛的主题和风格。
-
Comic(漫画):
- 地域: "Comic" 是一个通用的英语词汇,用于描述西方国家的漫画,主要是美国漫画。
- 特点: Comic 的特点包括从左到右的阅读顺序,以及通常较大的页数和较大的漫画行业。
需要注意的是,"manga" 和 "comic" 不仅仅是描述漫画的词汇,它们还代表了不同的创作风格、文化和产业。虽然在某些上下文中可能会使用这两个词汇来泛指漫画,但在讨论时最好根据具体的地域和文化使用适当的术语。
其余未汉化版本¶
推荐文件结构¶
kativa¶
- Kavita enforces that all files are within folders from the library root. Files at library root will be ignored.
- kativa 会将不符合文件夹命名
Series Name
的新文件(e.g.,abc.cbz
),当作新的作品单独列出在根目录。这十分傻逼,对内容的共振度的要求也太高了。出现一个命名不规范的文件就会乱套。 - kativa 对文件类型也会做特殊处理,对png, cbz, zip文件会有不同的阅读器,最搞笑的是 kativa会把子章节cbz的同名图片单独用个文件夹放置,而不是识别出章节的封面图,kativa会读取子章节cbz的内容当作封面图。
smanga¶
可以看得出作者有特殊的设计。
但是美中不足的是对于子文件夹的支持不够,太深的文件读取不到。
单行本¶
理论如此,但是实际貌似会卡住。
komga¶
Komga支持CBZ/CBR、EPUB、PDF格式。对于漫画而言,个人觉得cbz1是最简单、兼容性最高的格式。
建议的文件结构如下:
.
└── libraryManga
├── 我 推 的 孩 子
│ ├── 第 1话.cbz
│ └── 第 9话 .cbz
└── 辉夜大小姐想让我告白
├── 01话 .cbz
└── 02话.cbz
3 directories, 4 files
libraryManga
表示库名,下一层结构区分不同的漫画,更下一层则存储漫画文件- komga相对于kavita的异同
- 都不会识别根目录下的文件
- 但是komga不会管Series文件夹的子文件夹,会认为不存在,全部打散。kavata由于命名的原因会将Series文件夹的子文件夹内的内容当作新的系列,提到根目录显示。
内容的组织¶
需要考虑的点¶
内容的组织考虑的是一个平衡,每个lib下应该只有40个左右的内容。
- 根据类别分类:
- 韩漫,日漫,杂志
- 根据时间分类:每个月大约有50部左右
下载的内容的特点:
- 日漫,很多是单行本没有系列的,所以系列的这一级文件夹可以使用时间代替
- 有些库太大了,估计有一千本漫画(漫之学院),必须分开。
- 有些库还是识别不了
合集/A/PDF/*
实践¶
看多少,刮削多少。
内容的刮削¶
calibre + ehentai¶
见 Calibre and its Pugins for e-hentai Books 一文
失败:BangumiKomga¶
- 一个从Bangumi获取元数据并填充的Python脚本。
- 但是自动识别刮削的成功率很低,强烈建议在Bangumi中先找到对应漫画后把链接贴到Komga系列作品链接处,标签写为
cbl
,配置好后在目录下运行python processMetadata.py
,即可近乎完美的给漫画加上海报和信息了 - 但是Bangumi又没有本子的内容
集成订阅平台:tachidesk¶
尝试后发现是,类似RSS的漫画网页集成浏览器(B站,腾讯漫画,18+漫画)。实现订阅,跟踪,一键下载。 由于生态很不错,不用担心订阅链接失效。
Bugs docker stopped in UGREEEN¶
我猜测是内存不够
kavita自动关机
[Kavita] [2023-12-08 07:21:00.508 +00:00 194] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/image/series-cover?seriesId=759&apiKey=39714029-85f9-446c-9834-9ad384fda00d responded 304 in 0.9718 ms
[Kavita] [2023-12-08 07:21:50.010 +00:00 188] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP POST /api/account/refresh-token responded 200 in 2630.1327 ms
[Kavita] [2023-12-08 07:21:50.043 +00:00 193] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/license/valid-license?forceCheck=false responded 200 in 17.1837 ms
[Kavita] [2023-12-08 07:21:50.045 +00:00 182] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP POST /hubs/messages/negotiate?negotiateVersion=1 responded 200 in 5.7189 ms
[Kavita] [2023-12-08 07:21:50.131 +00:00 168] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/device responded 200 in 107.7960 ms
Server is shutting down. Please allow a few seconds to stop any background jobs...
You may now close the application window.
[Kavita] [2023-12-08 07:21:55.785 +00:00 179] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP POST /hubs/messages/negotiate?negotiateVersion=1 responded 200 in 0.1795 ms
[Kavita] [2023-12-08 07:21:55.789 +00:00 45] [Information] Microsoft.Hosting.Lifetime Application is shutting down...
[Kavita] [2023-12-08 07:22:26.562 +00:00 179] [Fatal] Host terminated unexpectedly
System.AggregateException: One or more hosted services failed to stop. (The operation was canceled.)
---> System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
at Hangfire.Processing.TaskExtensions.WaitOneAsync(WaitHandle waitHandle, TimeSpan timeout, CancellationToken token)
at Hangfire.Processing.BackgroundDispatcher.WaitAsync(TimeSpan timeout, CancellationToken cancellationToken)
at Hangfire.Server.BackgroundProcessingServer.WaitForShutdownAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.StopAsync(CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Microsoft.Extensions.Hosting.Internal.Host.StopAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdownAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at API.Program.Main(String[] args) in /home/runner/work/Kavita/Kavita/API/Program.cs:line 115
komga自动关机
查看对应docker日志, 猜测容器运行时,可能会受到资源限制,例如内存不足、CPU 使用过高等。如果容器超过了资源限制,可能会被系统强制关闭。
2023-12-07T11:28:39.022Z INFO 1 --- [taskProcessor-4] o.g.komga.application.tasks.TaskHandler : Task FindBooksWithMissingPageHash(libraryId='0EEB1WDMHPFT0', priority='0') executed in 722.922us
2023-12-07T11:28:39.080Z INFO 1 --- [taskProcessor-4] o.g.komga.application.tasks.TaskHandler : Executing task: FindDuplicatePagesToDelete(libraryId='0EEB1WDMHPFT0', priority='0')
2023-12-07T11:28:39.096Z INFO 1 --- [taskProcessor-4] o.g.komga.application.tasks.TaskEmitter : Sending tasks: []
2023-12-07T11:28:39.096Z INFO 1 --- [taskProcessor-4] o.g.komga.application.tasks.TaskHandler : Task FindDuplicatePagesToDelete(libraryId='0EEB1WDMHPFT0', priority='0') executed in 16.090346ms
2023-12-07T13:38:16.408Z INFO 1 --- [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete
2023-12-07T13:38:16.638Z INFO 1 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete
2023-12-07T13:38:18.871Z INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : SqliteTaskPool - Shutdown initiated...
2023-12-07T13:38:18.883Z INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : SqliteTaskPool - Shutdown completed.
2023-12-07T13:38:18.887Z INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : SqliteUdfPool - Shutdown initiated...
2023-12-07T13:38:18.889Z INFO 1 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : SqliteUdfPool - Shutdown completed.
____ __.
| |/ _|____ _____ _________
| < / _ \ / \ / ___\__ \
| | ( <_> ) Y Y \/ /_/ > __ \_
|____|__ \____/|__|_| /\___ (____ /
\/ \//_____/ \/
Version: 1.8.4
需要进一步的研究学习¶
暂无
遇到的问题¶
暂无
开题缘由、总结、反思、吐槽~~¶
参考文献¶
https://sspai.com/post/79100