Skip to content

Repository files navigation

PikPak 磁力管理器

一站式磁力管理工具,支持磁力预览、离线下载到 PikPak、图片管理、标签分类、云备份。


🚀 快速开始

只用网页(推荐配合扩展)

  1. 部署 page/index.html 到 GitHub Pages 或任意静态托管
  2. 安装下方浏览器扩展
  3. 页面自动通过扩展桥接 PikPak,无需配置
  4. 登录 PikPak 即可离线下载

也可以不装扩展独立使用,需自行部署 CORS 代理(见下方)。

安装浏览器扩展

  1. 打开 chrome://extensions → 开启 开发者模式
  2. 加载已解压的扩展程序 → 选择本仓库 extension/ 目录
  3. 扩展会自动注入到所有网页,安装后在任意网页的磁力链接旁会出现「预览」按钮

扩展功能:磁力嗅探、预览弹窗、图片代理下载、PikPak 内部登录、待导入队列

扩展设置:右键扩展图标 → 选项,可登录 PikPak、管理待导入队列、配置图片白名单。


📖 功能使用指南

场景一:在任意网页发现磁力,保存到管理器

假设你在论坛、BT 网站看到一部想下载的电影:

  1. 安装扩展后,页面上的每个磁力链接旁边会自动出现「🔍 预览」按钮
  2. 点击「🔍 预览」,弹出窗口显示标题、截图、文件大小
  3. 在弹窗中你可以:
    • 💾 保存:保存到磁力管理器
    • 📥 离线:直接发送到 PikPak 离线下载
    • ⚡ 离线并保存:两者都做
    • 弹窗中的标题可以直接点击编辑
  4. 保存后打开管理器页面,卡片已出现在列表中

没有扩展也能用:复制磁力链接 → 打开管理器页面 → 页面自动检测到剪贴板中的磁力链接并提示导入。

场景二:批量添加多个磁力

如果你有一批磁力链接(比如从资源帖中复制了十几部电影):

  1. 点顶部工具栏 ➕ 添加磁力(或菜单中的「批量添加磁力」)
  2. 粘贴所有磁力链接(每行一个),点击 🔍 解析
  3. 每个链接显示为一行,包含预览、离线、保存按钮:
    • 🔍 预览:查看磁力详情(标题、截图、大小)
    • 📥 离线:发送到 PikPak
    • 💾 保存:保存到管理器(自动获取标题和截图,无需手动填写)
    • ⚡ 离线并保存:两者都做
  4. 底部还有「全部保存」「全部离线」「全部离线并保存」一键操作

场景三:从 Telegram 频道/群组导入视频到 PikPak

需要先部署 Telegram Bot(见下方「部署 Telegram Bot」),并在页面点 TG 登录

首次登录:

  1. 点顶部工具栏 TG 登录 → 选择国家 → 输入手机号
  2. 输入 Telegram 发送的验证码
  3. 如果开启了两步验证,输入密码
  4. 登录成功后状态显示「✅ 已登录」

导入视频:

  1. 在 Telegram 中找到想下载的视频,复制其 t.me 链接(如 https://t.me/频道名/123
  2. 页面自动检测到剪贴板中的链接,开始解析
  3. 解析完成后,该链接对应的卡片出现在列表中:
    • 单视频链接 → 生成一张卡片,显示视频标题和截图
    • 相册(多条视频) → 合并成一张卡片,显示「🎬 视频×N」
  4. 点击卡片上的 📥 离线,Bot 会将视频转发到你的 @PikPak_Bot,自动创建离线任务

文件引用过期怎么办:

  • Bot 转发时如果文件引用(fileReference)过期,页面会自动重新解析 TG 链接并重试,无需手动操作
  • 如果自动重试失败,可以手工点击卡片上的 🔄 更新 按钮,手动刷新元数据后再试

私密频道(禁止转发):

  • 如果频道设置了 noforwards,卡片上会显示 🔒 图标
  • 点击离线时会自动打开 t.me 链接,你自己在 Telegram 中手动保存

旧卡片迁移(重要):

如果你之前已经用过 Bot 并保存了一些 TG 卡片,建议做一次迁移: 菜单 → 📤 迁移旧卡片元数据 → 将 Bot 中的文件元数据写入卡片自身。 迁移后卡片不再依赖 Bot,清空 Bot 数据也不影响转发,然后再做备份。

场景四:整理和分类你的收藏

打标签:

  • 创建标签:菜单 → 🏷️ 管理标签 → 输入标签名 → 添加
  • 在卡片上点击 ✏️ 编辑 可以给卡片加标签
  • 标签栏中点击标签可以筛选出该标签的所有卡片
  • 标签可以拖拽排序,顺序会保持

自动标签(省力): 菜单 → 🤖 自动标签规则 → 添加规则 例如设置规则:"标题包含 4K" → "自动打上 4K 标签" 之后点 ✨ 批量应用规则 即可对所有卡片生效

评分: 卡片底部的星星可以点 1-5 星评分,顶部有评分筛选按钮。

搜索和筛选:

方式 操作
🔍 搜索框 输入标题或标签名,实时过滤
⭐ 评分筛选 点星星筛选特定评分的卡片
📋 下拉筛选 全部 / 无标签 / 网络图 / 无图片 / 电报卡片
点击标签 快速筛选该标签的卡片

场景五:批量管理多个卡片

进入选择模式(勾选卡片右上角复选框,或 Shift+点击连续多选),底部浮动工具栏出现:

按钮 用途
🏷️ 批量添加标签 选中的卡片统一加标签
🔗 批量复制链接 一键复制所有磁力链接
💾 批量存本地 将网络图片下载到浏览器(永久有效)
📥 批量离线 全部发送到 PikPak(可选文件夹)
🗑 批量删除 删除选中卡片
🔄 重新获取 按 TG 链接重新生成卡片(会删除旧的并重新创建)
🔄 更新元数据 批量刷新 Telegram 视频文件元数据

场景六:备份数据到云端

完整备份(换设备、迁移用):

  1. 菜单 → 📤 迁移旧卡片元数据(如果有 TG 卡片的话)
  2. 菜单 → 💾 完整备份(含图片) → 下载 ZIP 包
  3. 将 ZIP 存到网盘或其他地方
  4. 恢复时:菜单 → 📂 恢复完整备份 → 选择之前下载的 ZIP

日常增量备份(Google Drive):

  1. 顶部工具栏 → ☁️ 云端管理 → 按提示授权 Google 账号
  2. 点「☁️ 上传备份」→ 只上传新增或修改的卡片/图片
  3. 下次再点「☁️ 上传备份」→ 增量上传,不会重复

📐 页面布局说明

侧边栏菜单(左侧)

菜单项 功能
➕ 添加磁力 手动输入磁力链接
📋 从剪贴板导入 从复制的 JSON 数据导入
🏷️ 管理标签 创建/删除标签
🤖 自动标签规则 按标题关键词自动打标签
✨ 批量应用规则 对所有卡片执行自动标签规则
🔍 清理重复项 检测并删除重复磁力(支持精确/模糊匹配 / 按电报链接去重)
✂️ 管理标题过滤词 自动移除标题中的广告词
🧹 批量清理标题 对所有卡片标题执行过滤词清理
📦 一键转换所有图片到本地 将所有网络图片下载到浏览器本地
⚠️ 查看转换失败列表 图片下载失败的卡片列表
⚠️ 预览失败(429) 之前预览失败的磁力,可批量重试
💾 完整备份(含图片) 导出 ZIP(含全部图片)
📂 恢复完整备份 从 ZIP 恢复数据
📁 从文件夹导入图片 从本地文件夹导入图片到卡片
💾 导出数据(单文件) 快速备份元数据(不含图片)
📂 导入数据(单文件) 从单文件恢复
📤 迁移旧卡片元数据 将 Telegram 卡片元数据写入卡片自身(备份前执行)
🗑️ 重置所有数据 清空所有数据

侧边栏底部有 🌙 暗色模式切换按钮。

顶部工具栏

按钮 功能
➕ 添加磁力 打开批量添加弹窗
📥 扩展导入 从扩展的待导入队列拉取卡片
⏱ 自动导入 定时从扩展队列自动拉取(可设间隔分钟)
☁️ 云端管理 Google Drive 增量备份/恢复
🔑 PikPak 登录 页面直连 PikPak(无需扩展时用)
✈️ TG 登录 登录 Telegram 账号(用于 Bot 转发)
🔍 测试连通性 测试 PikPak 和各服务连通性
🟢 监视剪贴板 自动检测剪贴板中的磁力/TG 链接

卡片视图

卡片以网格排列,每张显示:

  • 预览图(本地/网络,点击可放大)
  • 标题 + 标签徽章(视频/本地/网络)
  • 标签(彩色标签条)
  • 文件大小
  • 磁力链接 / TG 链接(可点击)
  • 操作按钮(离线、预览、编辑、存本地、更新、删除等)
  • 评分星星

图片管理

  • 上传图片:编辑卡片时点「📁 上传图片」选择本地文件
  • 粘贴图片 URL:编辑卡片时直接粘贴网络图片链接
  • 网络→本地:点卡片的 💾 存本地 将网络图下载到浏览器(永久有效,不怕图床失效)
  • 一键全部转换:菜单 → 📦 一键转换所有图片到本地
  • 本地图片:存储在浏览器 IndexedDB 中,备份时随 ZIP 导出

数据导入/导出

方式 含图片 大小 适用场景
导出单文件 快速备份/迁移元数据
完整备份 ZIP 换设备、完整迁移
Google Drive 云备份 ✅增量 中等 日常自动备份

💡 建议流程:迁移旧卡片 → 完整备份 ZIP → 存网盘。平时用 Google Drive 增量备份。


🛠 部署指南

部署网页(GitHub Pages)

  1. Fork 本仓库
  2. 仓库 Settings → Pages → Source 选 GitHub ActionsDeploy from a branch
  3. 目录选 /page/,部署完成访问 https://你的用户名.github.io/仓库名/

部署 Telegram Bot

cd telegram-bot
npm install

复制 .env.example.env,填入:

API_ID=你的API_ID              # https://my.telegram.org/apps
API_HASH=你的API_HASH
BOT_TOKEN=你的Bot_Token        # @BotFather 创建
BOT_USERNAME=你的Bot用户名
ALLOWED_USER_ID=你的TG用户ID   # 可选,限制 Bot 只接受你的命令
TARGET_BOT_USERNAME=@PikPak_Bot
PORT=19876

启动:双击 start_bot.batnode telegram-bot/index.js

首次启动需要扫码或手机号登录 Telegram 账号。

Bot API 端点:

端点 用途
POST /api/resolve-tg-link 解析 t.me 链接,下载图片,创建 pending 卡片
POST /api/resolve-tg-file 轻量解析,仅返回文件元数据(不下图不入队列)
POST /api/forward-to-pikpak/:fileId 转发文件到 @PikPak_Bot
GET /api/pending 获取待导入卡片列表
DELETE /api/pending/:id 删除指定待导入卡片
GET /api/doc-map 获取全量文件映射(旧卡片迁移用)
GET /api/doc-map-entry/:docId 获取单个映射条目
POST /api/telethon/send-code 发送 Telegram 登录验证码
POST /api/telethon/sign-in 验证码登录
POST /api/telethon/check-2fa 检查是否需要两步验证

部署 CORS 代理(仅无扩展时需要)

一键部署到 Vercel:Deploy to Vercel

部署后在页面「PikPak 登录」弹窗底部填入代理地址。

本地直接访问

node proxy/server.js
# 浏览器打开 http://localhost:3000

同源访问,无需任何代理配置。


📁 目录结构

/
├── page/index.html            ← 磁力管理器页面(GitHub Pages 入口)
├── extension/                  ← Chrome 扩展
│   ├── manifest.json
│   ├── content.js              ← 页面桥接通信
│   ├── background.js           ← 后台 Service Worker
│   ├── magnet-detector.js      ← 磁力嗅探与预览弹窗
│   ├── options.html / .js      ← 扩展设置页
│   └── pikpak-token.js         ← PikPak Token 捕获
├── telegram-bot/               ← Telegram Bot(gramjs MTProto)
│   ├── index.js                ← Express 服务器 + gramjs 客户端
│   ├── .env.example
│   └── start_bot.bat
├── proxy/                      ← CORS 代理
│   ├── server.js               ← 本地 Node.js 代理
│   ├── worker.js               ← Cloudflare Worker
│   └── start-server.bat
├── api/proxy/index.js          ← Vercel Serverless 代理
└── README.md