Skip to content

如何配置腕上漫画自定义漫画源

本文 3,130 字 · 预计 11 分钟读完

如何配置腕上漫画自定义漫画源

腕上漫画支持配置自定义漫画源,让你可以使用自己选择的漫画 API。本文将从简单到复杂,逐步介绍如何使用自定义漫画源。

内容来源与服务责任

请只接入你有权访问和使用的内容源,并遵守来源网站规则、作品授权和所在地适用法律。自行部署接口时,不得绕过付费、登录、访问控制或其他技术保护措施,也不得公开传播未经授权的内容。

添加漫画源

如果你已经有可用的漫画源地址,可以直接添加到腕上漫画中使用。

添加步骤

在快应用内直接添加

  1. 打开腕上漫画应用 应用启动
  2. 首页点击上面的🖊进入漫画源管理 添加漫画源
  3. 点击下面的+按钮添加漫画源 添加漫画源
  4. 输入你的漫画源地址:你的域名(例如 youapi.domain输入漫画源
  5. 联网保存后通过验证即可使用 成功
  6. 回到主页选择切换到你的漫画源,就可以开始使用了 切换漫画源

使用腕上漫画同步器插件同步添加

  1. 打开腕上漫画应用 应用启动
  2. 回到AstroBox,来到插件页面,选择腕上漫画同步器(没有装的自己到插件市场装) 插件
  3. 进入插件页面,直接输入漫画源(格式:https://youapi.domain),等待获取成功之后点击同步同步
  4. 回到主页选择切换到你的漫画源,就可以开始使用了 切换漫画源

同步方式区别

提示

一般优先考虑直接在快应用内添加自定义漫画源,通过插件同步方式固然方便,但由于不同Vela设备底层支持的SSL证书不完全,所以在发现某个漫画源在无法通过快应用直接添加的时候,使用插件同步依然会导致对应漫画源无法使用,如果遇到这个情况建议联系对应漫画源作者或尝试自己换SSL证书。

上传Cookie

部分漫画源需要登录才能访问更多内容,你可以通过腕上漫画同步器插件上传Cookie。

Cookie 可能等同于登录凭据

Cookie 可能允许他人直接访问你的账号。仅向自己控制或充分信任的漫画源发送 Cookie,不要使用来源不明的同步器、公共接口或他人提供的服务器。建议使用权限较低的独立账号,不要使用保存了支付信息或重要个人数据的主账号。

复制 Cookie 时不要截图、录屏或粘贴到聊天软件。若 Cookie 意外泄露,请立即在来源网站退出所有会话、修改密码,并按网站提供的方式撤销登录状态。

安装插件

  1. 在 AstroBox 的插件市场中搜索并安装腕上漫画同步器插件。 插件

获取Cookie

不同漫画源对 Cookie 的要求不同。只有在确认漫画源可信、确实需要登录且你理解其用途时才应继续;不确定时不要提供 Cookie。

  1. 在电脑浏览器中打开你的漫画源网站
  2. 登录账号(如果需要)
  3. F12 打开开发者工具 → 切换到 Network(网络) 标签
  4. 刷新页面,点击任意一个请求
  5. 在请求头中找到 Cookie 字段,复制其值 Cookie

使用插件上传

  1. 打开 AstroBox 的 腕上漫画同步器 插件 插件
  2. 漫画源域名:输入你的漫画源地址,例如 https://youapi.domain
  3. 插件会自动获取漫画源名称并显示在漫画源名称字段
  4. Cookie:仅在确认插件和漫画源可信后,粘贴从浏览器复制的 Cookie 值
  5. 点击同步到手表按钮 同步

完成!

再次注意

插件会将 Cookie 发送到手表上的腕上漫画应用,之后访问该漫画源时,请求会自动携带 Cookie。使用前请确认手表和漫画源的存储、传输方式符合你的安全预期;不再使用该漫画源时,应退出账号并撤销对应会话。

快速部署漫画源

如果你找不到可用的漫画源,可以使用作者提供的开源仓库快速部署一个。

鉴于大部分用户没有写代码的经历,以及个人原因无法保证所有的漫画源可用,在这里优先推荐各位用户搭建自己的自定义漫画源。

搭建方法非常简单,只需要一个Vercel账号以及一个自己的域名即可。

可用仓库

选择下面可用的仓库,按照指引部署即可快速搭建好可用的漫画源。不过其中的域名是无法访问的,需要搜索Vercel如何绑定自定义域名才可以使用。

jmcomic API

vercel-flask-jmcomic-api

ehentai API

vela-py-eh-api-server

使用Vercel部署

下面以部署 jmcomic API 为例,介绍如何使用 Vercel 部署漫画源。

准备工作

  1. 一个 GitHub 账号
  2. 一个 Vercel 账号(可以用GitHub账号直接登录)
  3. 一个自己的域名(用于绑定到Vercel)

部署步骤

1. Fork仓库

访问 vercel-flask-jmcomic-api 仓库,点击右上角的 Fork 按钮,将仓库Fork到你的账号下。

2. 导入到Vercel
  1. 登录 Vercelvercel-login
  2. 点击 Add New...Projectvercel-add-new
  3. Import Git Repository 页面,先链接你的GitHub账号,后选择你刚才Fork的仓库
  4. 点击 Importvercel-import
3. 配置项目
  1. 全部保持默认配置
  2. 点击 Deploy 开始部署

vercel-deploy

4. 等待部署完成

部署过程通常需要1-2分钟,等待显示 Congratulations! 即表示部署成功。 vercel-deploy-success

5. 绑定自定义域名

⚠️ 重要:Vercel默认分配的域名(xxx.vercel.app)在国内可能无法访问,需要绑定自己的域名。

  1. 进入项目页面,点击 Domainsvercel-domains
  2. 点击 Add Existing,输入你的域名,点击 Savevercel-domains-addvercel-domains-add2
  3. 按照提示在你的域名服务商处添加DNS解析记录
  4. 等待DNS生效(通常几分钟到几小时)
6. 测试漫画源

绑定域名后,访问 https://你的域名/config,如果能看到JSON配置信息,说明部署成功。

部署完成后,按照上面的 添加漫画源 步骤添加即可使用。

实验性功能:导入Venera漫画源

由于Venera的漫画源通常通过 JS 解析 HTML 获取数据,不适合直接在腕上漫画内运行,腕上漫画提供了实验性的转换方案,允许将 Venera 漫画源转换为腕上漫画可用的 HTTP API。

该方法需要用户拥有服务器和自定义域名,可参考以下仓库:

venera-source-converter

自定义漫画源格式要求

如果你想自己开发漫画源,需要遵循以下格式规范。

基本要求

  1. 建议支持 SSL(HTTPS)。自 v2.1 起支持 HTTP 回退:HTTPS 连接失败时会自动尝试 HTTP 并提示未加密连接
  2. 必须在 /config 路由输出漫画源配置
  3. 所有业务接口建议返回 UTF-8 JSON
  4. 图片 URL 必须能被快应用直接请求,或者由你的 API 代理后返回图片二进制
  5. 如果需要登录态,可以通过 Cookie 支持用户认证

配置文件格式

漫画源必须在 /config 路由输出以下配置文件:

json5
{
  sourceKey: {
    name: "sourceName", // 漫画源显示名称(主界面显示的名称)
    apiUrl: "https://youapi.domain", // API 基础地址,建议 HTTPS,不要以 / 结尾
    detailPath: "/album/<id>", // 漫画详情 API,必须包含 <id> 占位符
    photoPath: "/photo/<id>/chapter/<chapter>", // 图片列表 API,必须包含 <id>,章节漫画还应包含 <chapter>
    searchPath: "/search/<text>/<page>", // 搜索 API,必须包含 <text> 和 <page>
    type: "sourceType", // 漫画源类型标识(建议)
  },
}

字段说明:

字段必需说明
sourceKey漫画源内部键名。Cookie、当前源选择等会使用它作为标识
name在腕上漫画主界面显示的漫画源名称
apiUrlAPI 基础地址,建议 HTTPS(自 v2.1 起支持 HTTP 回退及 IP+端口形式),不要以 / 结尾
detailPath漫画详情接口路径,必须包含 <id> 占位符
photoPath漫画图片列表接口路径,必须包含 <id>,章节漫画还应包含 <chapter>
searchPath搜索接口路径,必须包含 <text><page>
type建议漫画源类型标识,当前主要用于区分来源,可与 sourceKey 相同

实际请求流程

  • ID 直达详情:用户输入纯数字时,应用会请求 GET {apiUrl}{detailPath.replace("<id>", 用户输入ID)},例如 GET https://youapi.domain/album/114514
  • 关键词搜索:用户输入非纯数字内容时进入搜索页,<text> 会被使用 encodeURIComponent 编码,例如 GET https://youapi.domain/search/%E6%B5%8B%E8%AF%95/1
  • 打开搜索结果:用户点击搜索结果后,会再次请求详情接口(传入 comic_id
  • 打开阅读页:先请求图片列表,再逐页请求 images[].url 中的图片

API路由输出规则

detailPath - 漫画详情

获取漫画详情信息,用于在详情页显示漫画的基本信息。

json5
{
  item_id: 114514, // 漫画ID(必需)
  name: "comicName", // 漫画名称(必需)
  page_count: 24, // 页数(必需,章节漫画可先返回第一章页数)
  views: 1919810, // 漫画浏览量(可选)
  rate: 9.0, // 漫画评分(可选)
  cover: "https://youapicover.domain", // 漫画封面(必需)
  tags: ["tag1", "tag2"], // 漫画标签数组(可选)
  total_chapters: 10, // 总章节数(可选,大于 1 时应用按章节漫画处理,未提供时建议返回 1)
}

字段说明:

字段必需类型说明
item_idnumber / string漫画 ID,后续阅读和下载会继续使用
namestring漫画名称
page_countnumber页数。章节漫画可先返回当前源可获得的总页数或第一章页数,阅读页会根据图片列表重新更新
coverstring封面图片 URL,应用会自动追加封面图片参数
viewsnumber / string浏览量
ratenumber / string评分
tagsarray标签数组
total_chaptersnumber总章节数,大于 1 时应用按章节漫画处理,未提供时建议返回 1

searchPath - 搜索漫画

搜索漫画,返回分页搜索结果列表。

json5
{
  page: 1, // 当前页数(必需)
  has_more: true, // 后面是否还有更多页数(必需)
  results: [
    // 搜索结果数组(必需)
    {
      comic_id: 114514, // 漫画ID(必需)
      title: "comicName", // 漫画名称(必需)
      cover_url: "https://youapicover.domain", // 漫画封面(必需,应用会自动追加封面参数)
      pages: 24, // 页数(可选)
    },
  ],
}

字段说明:

字段必需类型说明
pagenumber当前返回的页码,应用会用 page + 1 作为下一次请求页码
has_moreboolean是否还有下一页
resultsarray搜索结果数组
results[].comic_idnumber / string漫画 ID,点击结果后会传给详情接口
results[].titlestring漫画标题
results[].cover_urlstring搜索结果封面 URL,应用会自动追加封面图片参数
results[].pagesnumber页数,用于搜索结果中展示

photoPath - 图片列表

获取指定章节的图片列表,用于在阅读页面显示漫画内容。

💡 images[].url 不需要提前拼好 widthqualityifPNGifLVGL 参数,腕上漫画会在真正请求图片文件时自动追加这些参数。

json5
{
  title: "comicName", // 当前漫画或章节标题(必需)
  images: [
    // 图片数组(必需)
    { url: "https://youapiphoto1.domain/image/1" },
    { url: "https://youapiphoto2.domain/image/2" },
  ],
}

图片 URL 参数规则

腕上漫画会对封面图和正文图片追加不同参数。

正文图片

阅读页和下载正文图片时,应用会追加:

text
width=<设置里的图片尺寸>&quality=<设置里的图片质量>

如果用户开启"PNG图片解析",还会追加:

text
ifPNG=1

如果用户开启"图片预解码",还会追加:

text
ifLVGL=1

并且 URL 末尾会追加 fragment,用于本地临时文件识别:

text
#<chapter>.bin
#<page>.bin

示例:

text
https://youapi.domain/image/proxy?url=xxx&width=600&quality=50&ifPNG=1&ifLVGL=1#1.bin

fragment 不会发送到服务器,只用于客户端本地识别临时文件扩展名。

封面图片

搜索封面、详情封面、下载封面会追加:

text
width=80&quality=<设置里的图片质量>

开启"PNG图片解析"后还会追加 ifPNG=1。封面不会追加 ifLVGL,也不会保存为 .bin

如果你的旧接口使用 w 表示宽度,建议同时兼容 width

python
width = request.args.get("width") or request.args.get("w")

图片接口建议行为

图片接口可以是正文图片直出接口,也可以是代理接口,需要完整返回图片二进制数据(如 Content-Type: image/jpegimage/png),建议提供正确的 Content-Length,不应做分段或流式响应。

参数类型说明
widthnumber目标宽度。正文图片默认可按 600 处理,封面会传 80
qualitynumber图片质量,范围建议 1-100。JPEG 可直接映射质量;PNG 可用于颜色量化
ifPNGtruthy1trueyeson 时返回 PNG
ifLVGLtruthy1trueyeson 时返回 LVGL 预解码二进制

返回类型优先级:

text
ifLVGL=1 > ifPNG=1 > 默认 JPEG
  • ifLVGL=1:返回 Content-Type: application/octet-stream 的 LVGL 预解码 .bin 数据(优先于 ifPNG
  • ifPNG=1:返回 Content-Type: image/png。推荐不改变图片尺寸(除非传了 width)、去掉透明通道铺白底转 RGB、使用最高 PNG 压缩等级,可复用 quality 做颜色量化
  • 默认返回 Content-Type: image/jpeg

封面请求不会带 ifLVGL,所以封面接口不需要处理 LVGL。

请求头说明

所有 API 请求都会携带以下请求头:

text
User-Agent: packageName(versionName(versionCode))/product/brand/osType/osVersionName/osVersionCode/language/region

例如:

text
User-Agent: moe.yzf.comic(1.8(114))/Xiaomi Smart Band 9 Pro/Vela/NuttX/10.3.0/656128/zh/CN

你可以根据 User-Agent 中的 product 判断设备型号,从而根据设备的性能返回不同尺寸或格式的图片。

如果用户通过同步器上传过 Cookie,请求还会携带:

text
Cookie: cookie_value

Cookie支持

如果漫画源需要Cookie认证,用户可以通过腕上漫画同步器插件上传Cookie。

实现漫画源时不得记录、转发或公开用户 Cookie

应全程使用 HTTPS,限制日志内容,并向用户说明 Cookie 的存储位置、保留时间和删除方式。

Cookie 会以 JSON 格式存储在手表端:

json5
{
  sourceKey: "cookie_value",
}

其中 sourceKey 对应 /config 返回对象中的顶层键名,例如 JMComic。请求该漫画源接口时会自动添加 Cookie 请求头。

错误返回建议

建议错误时返回 JSON,并使用合适的 HTTP 状态码:

json
{
  "code": 500,
  "message": "错误原因"
}
场景HTTP 状态码返回
漫画不存在404{ "code": 404, "message": "Comic not found" }
章节不存在404{ "code": 404, "message": "Chapter not found" }
缺少参数400{ "code": 400, "message": "Missing parameter" }
上游失败502 / 500{ "code": 500, "message": "Upstream failed" }

最小可用示例

完整的接口返回格式、请求流程与最小可用 Flask 示例见项目仓库的自定义漫画源配置指南


希望这篇指南能帮助你配置自己的漫画源!如果有任何问题,欢迎在项目仓库提Issue反馈。

贡献者

The avatar of contributor named as sf-yuzifu sf-yuzifu
The avatar of contributor named as Roi Feng Roi Feng
The avatar of contributor named as 猫饼干 猫饼干

页面历史

Copyright ©2019-2026 米坛社区. all right reserved.

非从属关系声明

本站是由米坛社区维护的独立知识库,并非相关设备厂商、软件开发者或服务提供商的官方网站。除非页面明确说明,本站未获得相关主体的赞助、授权、运营委托或官方认可,与其不存在代理、合资、雇佣或其他从属关系。
Android、Google、MI、MI BAND、Xiaomi Watch、REDMI、HEYPLUS、黑加、HUAWEI、华为、HONOR、荣耀、AMAZFIT、Amazfit、米动、华米、HUAMI、vivo、vivo WATCH、iQOO、iQOO Watch,以及本站提及的其他品牌、产品与服务名称,可能是其各自权利人的商标或注册商标。本站对这些名称和标识的使用仅用于识别、说明或评论相关产品与服务,不表示本站拥有相关商标权,也不构成任何官方关联或背书。
本站与小米科技有限责任公司、深圳如一探索科技有限公司、华为技术有限公司、荣耀终端有限公司、安徽华米信息科技有限公司以及维沃移动通信有限公司没有从属关系
Android 机器人是在 Google 原创及共享成果的基础上再创作或修改而成,须遵照知识共享署名 3.0 许可所述条款付诸应用。

上次更新: