拾光是一款面向内容创作者与运营的视频素材采集与管理工具。按作者批量保存、下载前自动去重、下载完自动归档打标 —— 找素材的时间,还给创作。
从「找到作者」到「素材入库」,一条链路跑完,每一步都可暂停、可续传、可回溯。
粘贴 UP 主主页链接或 UID 即可导入,作品列表分页拉取、自动去重。支持全选勾选、按「未下载 / 已下载」筛选,一次选好整批入队。
大作者动辄几千条作品,同步被平台限流打断时不会整批作废 —— 已抓到的照常入库,记录断点页码,下次从断点继续,进度全程可见。
并发下载、失败自动退避重试、随时取消。实时进度条按秒刷新,显示下载速度与画质档位;完成经 WebSocket 秒级推送。
下载完成自动登记入库:ffprobe 补齐时长、分辨率、编码、码率,ffmpeg 抽取封面(默认取 10% 处避开片头黑场),网格浏览、点开即播。
入库时按平台官方分区自动打标(✦ 标识),也可以自建分类手动归组。左侧分类侧栏带搜索与计数,素材再多也翻得过来。
平台限流是这个品类的固有现实,我们不装死:冷却倒计时、断点位置、限流原因全部如实展示,用户永远知道「为什么还没拉完」。
全程在本地完成,不需要把文件传到任何云端。
粘贴主页链接 / UID,自动识别归一化
分页拉取元数据,自动去重,断点续传
作品抽屉里全选/反选,选定画质入队
多音轨画质自动合并,失败退避重试
登记入库、补媒体信息、抽封面、打分区标签
从 ID 到内容逐层把关 —— 已经是重复的,连队列都进不去。
平台唯一 ID 建立唯一索引,重复导入作者、重复勾选作品时自动跳过,列表同步阶段就完成第一道过滤。
取文件前 1MB 计算 SHA256 并记录文件大小,手工拷入、重复下载的完全相同文件在这一层直接拦截。
ffmpeg 抽取 4 帧计算感知哈希(pHash),汉明距离 ≤6 判为相似 —— 转码、换封装、不同码率的「同一支视频」也逃不掉。
Flutter 负责界面,Python 引擎作为独立后台进程常驻 —— 界面关了,下载照跑。
┌─ UI 层 · Flutter Windows ─────────────┐ │ HTTP 下命令 + WebSocket 收进度 │ └──────────┬────────────────────────────┘ │ 127.0.0.1 随机端口 ┌─ 引擎层 · Python sidecar ────────────┐ │ api/ REST 路由 + /ws │ adapters/ 平台解析器(插件式) │ services/ 下载·去重·媒体·授权闸门 │ db/ SQLite 数据模型 └──────────┬────────────────────────────┘ ┌─ 数据 · SQLite ── 库内相对路径 ───────┐ └───────────────────────────────────────┘ ┌─ 依赖 · ffmpeg(LGPL) · BBDown(MIT) ───┐ └───────────────────────────────────────┘
引擎可脱离界面独立运行,也能先启引擎再开界面(自动复用)。退出界面不会中断后台任务。
新增一个平台 = 新增一个适配器目录,主流程零改动。当前支持 B 站(抖音单链接支持中)。
官方 embeddable Python 随包发行,ffmpeg / BBDown 进程外调用,解压即用、不污染系统。
库内文件一律存相对路径,整体换盘、搬机器,不用改任何一行数据。
免费版够用,专业版一次买断。以下为规划方案,正式发布时可能微调。
拾光定位为「个人素材管理工具」:为每条素材保留来源链接(source_url)不可删除;不做自动去水印;批量采集请仅用于个人学习、研究与已获授权的场景,请尊重创作者权益与平台服务条款。