
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!https://raw.githubusercontent.com/KamiYomu/KamiYomu/refs/heads/main/Inkscape/logo.svg
KamiYomu is a powerful, extensible manga crawler built for manga enthusiasts who want full control over their collection. It scans and downloads manga from supported websites, stores them locally, and lets you host your own private manga reader—no ads, no subscriptions, no limits.
🔍 Automated Crawling
Fetch chapters from supported manga sites with ease.
💾 Local Storage
Keep your manga files on your own server or device.
🧩 Plugin Architecture
Add support for new sources or customize crawling logic.
🛠️ Built with .NET Razor Pages
Lightweight, maintainable, and easy to extend.
Whether you're cataloging rare series, powering a personal manga dashboard, or seeking a cleaner alternative to bloated online readers, KamiYomu puts you in control of how you access and organize manga content. It’s a lightweight, developer-friendly crawler built for clarity, extensibility, and respectful use of publicly accessible sources. Content availability and usage rights depend on the licensing terms of each source — KamiYomu simply provides the tools.
save the following docker-compose.yml file to run KamiYomu with Docker:
ymlservices: kamiyomu: image: marcoscostadev/kamiyomu:latest # Check releases for latest versions ports: - "8080:8080" # HTTP Port environment: # List of Hangfire server identifiers available to process jobs. # Each name corresponds to a distinct background worker instance; # add more entries here if you want multiple servers to share or divide queues. # add more entries using incrementing indexes (e.g., Worker__ServerAvailableNames__1, Worker__ServerAvailableNames__2, etc.) Worker__ServerAvailableNames__0: "KamiYomu-background-1" # Queues dedicated to downloading individual chapters. # add more entries using incrementing indexes (e.g., Worker__DownloadChapterQueues__1, Worker__DownloadChapterQueues__2, etc.) Worker__DownloadChapterQueues__0: "download-chapter-queue-1" # Queues dedicated to scheduling manga downloads (manages chapter download jobs). # add more entries using incrementing indexes (e.g., Worker__MangaDownloadSchedulerQueues__1, Worker__MangaDownloadSchedulerQueues__2, etc.) Worker__MangaDownloadSchedulerQueues__0: "manga-download-scheduler-queue-1" # Queues dedicated to discovering new chapters (polling or scraping for updates). # add more entries using incrementing indexes (e.g., Worker__DiscoveryNewChapterQueues__1, Worker__DiscoveryNewChapterQueues__2, etc.) Worker__DiscoveryNewChapterQueues__0: "discovery-new-chapter-queue-1" # Specifies the number of background processing threads Hangfire will spawn. # Increasing this value allows more jobs to run concurrently, but also raises CPU load # and memory usage. # Each worker consumes ~80 MB of memory on average while active # (actual usage may vary depending on the crawler agent implementation and system configuration). Worker__WorkerCount: 1 # Defines the maximum number of crawler instances allowed to run concurrently for the same source. # Typically set to 1 to ensure only a single crawler operates at a time, preventing duplicate work, # resource conflicts, and potential rate‑limiting or blocking by the target system. # This value can be increased to improve throughput if the source supports multiple concurrent requests. # # Note: # - Worker__WorkerCount controls the total number of threads available. # - Worker__MaxConcurrentCrawlerInstances limits how many threads can be used by the same crawler. # # Examples: # - If Worker__MaxConcurrentCrawlerInstances = 1 and Worker__WorkerCount = 4, # then up to 4 different crawler agents can run independently. # - If Worker__MaxConcurrentCrawlerInstances = 2 and Worker__WorkerCount = 6, # then each crawler agent can run up to 2 instances concurrently, # while up to 3 different crawler agents may be active at the same time. Worker__MaxConcurrentCrawlerInstances: 1 # Minimum delay (in milliseconds) between job executions. # Helps throttle requests to external services and avoid hitting rate limits (e.g., HTTP 423 "Too Many Requests"). Worker__MinWaitPeriodInMilliseconds: 3000 # Maximum delay (in milliseconds) between job executions. # Provides variability in scheduling to reduce the chance of IP blocking or service throttling. Worker__MaxWaitPeriodInMilliseconds: 9001 # Maximum number of retry attempts for failed jobs before marking them as permanently failed. Worker__MaxRetryAttempts: 10 # Default language for the web interface (e.g., "en", "pt-BR", "fr"). UI__DefaultLanguage: "en" restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/healthz"] interval: 30s timeout: 10s retries: 3 volumes: - ./AppData/manga:/manga # Your desired local path for manga storage - Kamiyomu_database:/db - kamiyomu_agents:/agents - kamiyomu_logs:/logs volumes: kamiyomu_agents: Kamiyomu_database: kamiyomu_logs:
In the folder where you saved the docker-compose.yml file, run:
bashdocker-compose up -d
You will have access to the web interface at http://localhost:8080.
Keep in mind to map the volumes to your desired local paths.
See the releases branchs for identifying the versions available.
Configure your sources and crawler agents
Download crawler agents from NuGet Package from https://github.com/orgs/KamiYomu/packages and upload them in http://localhost:8080/Settings/CrawlerAgents.
We recommend using Visual Studio 2022 or later with the .NET 8 SDK installed. However, you can also run KamiYomu using VsCode.
git checkout develop)git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)develop branchbashgit clone https://github.com/KamiYomu/KamiYomu.Web.git
/src/KamiYomu.Web.slndocker-compose project as startup project (Right-click on project, select Set As Startup Project.).To get started with local development using Visual Studio Code, ensure the following tools are installed:
Required Tools
Note: Make sure Docker is installed and running on your machine.
bashgit clone https://github.com/KamiYomu/KamiYomu.Web.git
./src/ folder in VS Code.F5.This project includes predefined tasks to build and run the Docker container automatically. If you install all required extensions, the project will run and open the browser in http://localhost:8080
NOTE: You may see a window with some error related
=> ERROR [kamiyomu.web internal] load metadata for mcr.microsoft.com/dotnet/sdk:8.0, just click onabortbutton then try again.
To create your first crawler agent, follow these steps:
KamiYomu.CrawlerAgents.Core.ICrawlerAgent interface. This class will contain the logic for crawling a specific manga source.csharp/// <summary> /// Defines a contract for manga crawling agents that support search, retrieval, and metadata extraction. /// </summary> public interface ICrawlerAgent : IDisposable { /// <summary> /// Asynchronously retrieves the favicon URI associated with the crawler's target site. /// </summary> /// <param name="cancellationToken">Optional token to cancel the operation.</param> /// <returns>A <see cref="Task{Uri}"/> representing the favicon location.</returns> Task<Uri> GetFaviconAsync(CancellationToken cancellationToken); /// <summary> /// Searches for manga titles matching the specified name, using either traditional pagination or a continuation token. /// </summary> /// <param name="titleName">The title or keyword to search for.</param> /// <param name="paginationOptions">Pagination parameters, supporting both page-based and continuation token-based pagination.</param> /// <param name="cancellationToken">Optional token to cancel the operation.</param> /// <returns>A paged result containing a collection of matching <see cref="Manga"/> entries.</returns> Task<PagedResult<Manga>> SearchAsync(string titleName, PaginationOptions paginationOptions, CancellationToken cancellationToken); /// <summary> /// Retrieves detailed information about a specific manga by its unique identifier. /// </summary> /// <param name="id">The unique ID of the manga.</param> /// <param name="cancellationToken">Optional token to cancel the operation.</param> /// <returns>A <see cref="Task{Manga}"/> containing the manga details.</returns> Task<Manga> GetByIdAsync(string id, CancellationToken cancellationToken); /// <summary> /// Retrieves a paged list of chapters for the specified manga. /// </summary> /// <param name="manga">The manga object.</param> /// <param name="paginationOptions">Pagination parameters, supporting both page-based and continuation token-based pagination.</param> /// <returns>A paged result containing a collection of <see cref="Chapter"/> entries.</returns> Task<PagedResult<Chapter>> GetChaptersAsync(Manga manga, PaginationOptions paginationOptions, CancellationToken cancellationToken); /// <summary> /// Retrieves the list of page images associated with a given manga chapter. /// </summary> /// <param name="chapter">The chapter entity containing metadata and identifiers.</param> /// <param name="cancellationToken">Optional token to cancel the operation.</param> /// <returns>A collection of <see cref="Page"/> objects representing individual chapter pages.</returns> Task<IEnumerable<Page>> GetChapterPagesAsync(Chapter chapter, CancellationToken cancellationToken); }
Do you want a reference implementation? Check:
NOTE: Make sure to use a Validator console app to ensure your crawler agent meets all requirements before deploying it to KamiYomu.
*** using this <PropertyGroup> in your csproj, adjust the title accorgly
xml<PropertyGroup> <Title>My Crawler Agent</Title> <Description>A dedicated crawler agent for accessing public data from My Personal Stuff. Built on KamiYomu.CrawlerAgents.Core, it enables efficient search, metadata extraction, and integration with the KamiYomu platform.</Description> <Authors>MyName</Authors> <Owners>MyName</Owners> <PackageProjectUrl>https://github.com/MyProjectUrl</PackageProjectUrl> <RepositoryUrl>https://github.com/MyRepositoryUrl</RepositoryUrl> <RepositoryType>git</RepositoryType> <PackageTags>kamiyomu-crawler-agents;manga-download</PackageTags> <PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression> <Copyright>© Personal. Licensed under GPL-3.0.</Copyright> <PackageIconUrl>https://raw.githubusercontent.com/MyPackageLogoUrl</PackageIconUrl> <PackageIcon>Resources/logo.png</PackageIcon> <PackageReadmeFile>README.md</PackageReadmeFile> </PropertyGroup>
The Package Tag <PackageTags>kamiyomu-crawler-agents</PackageTags> is required to be showed in KamiYomu add-ons
See the existing projects to use as a reference for your csproj.
This guide explains how to build, import, and debug a NuGet package for use in KamiYomu.
Add the following snippet to your .csproj file.
This ensures that a NuGet package is generated during the Debug build:
xml<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> <IncludeSymbols>True</IncludeSymbols> <IncludeSource>True</IncludeSource> <SymbolPackageFormat>snupkg</SymbolPackageFormat> </PropertyGroup>
Run a build in Debug mode.
The generated NuGet package (.nupkg) and symbol file (.pdb) will be located in:
Copy the .pdb file from your ***/Debug folder into:
src\AppData\agents\{your-crawler}\lib\net8.0
This allows Visual Studio to map your source code during debugging.
KamiYomu uses a decorator class to invoke agent methods:
src\KamiYomu.Web\Entities\CrawlerAgentDecorator.cs
This project is licensed under AGPL-3.0. See the LICENSE file for details.
Pull requests are welcome! If you have ideas for new features, plugin sources, or UI improvements, feel free to open an issue or submit a PR.
Questions, feedback, or bug reports? Reach out via GitHub Issues or start a discussion.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务