根据短视频找1688产品
- TypeScript 99.5%
- Shell 0.5%
| .forgejo/workflows | ||
| scripts | ||
| src | ||
| .DS_Store | ||
| .env.example | ||
| .gitignore | ||
| bun.lock | ||
| install.sh | ||
| package.json | ||
| README.md | ||
| SKILL.md | ||
video-product-snapshot — 视频商品以图搜图
从视频中提取最佳商品帧,以图搜图在 1688 找同款。
工作原理
ffmpeg按 0.5s 间隔抽帧(最多 60 帧)- 视觉质量预过滤(亮度/方差剔除模糊帧)
- 容器/架子类产品检测 → 自动选择空载帧
- 视觉模型多帧对比排序,选出最佳商品帧
- 裁剪商品区域 → 上传 → 1688 图搜
- 后置过滤(视觉模型判断结果是否同款)→ rerank 排序
安装
./install.sh # 安装 Bun 依赖并构建
bun install
bun run build # 输出到 dist/run.js
使用方法
bun dist/run.js <command> [options]
命令
| 命令 | 说明 |
|---|---|
detect-best-and-search <video> |
推荐。 最佳帧 → 图搜 → rerank |
detect-best <video> |
只提取最佳商品帧,不搜图 |
detect-and-search <video> |
两阶段过滤后图搜(较慢) |
detect <video> |
抽帧并逐帧检测商品 |
search <image> |
用已有图片搜同款 |
rerank |
关键词对图搜结果交叉过滤 |
session |
获取当前认证会话 token |
选项(detect-best / detect-best-and-search)
| 参数 | 默认值 | 说明 |
|---|---|---|
--interval=<秒> |
0.5 |
帧采样间隔 |
--max-frames=<n> |
60 |
最大分析帧数 |
--output-dir=<目录> |
视频同目录 | 截图保存目录 |
--session-id=<id> |
自动生成 | Langfuse session ID |
--dry-run |
— | 解析参数,不实际执行 |
输出
所有命令输出 JSON 到 stdout,包含 sessionId 字段用于 Langfuse 追踪。
{
"sessionId": "skill-20260426-184345-lb06",
"status": "success",
"command": "detect-best-and-search",
"bestSnapshot": {
"frameIndex": 7,
"timestampSeconds": 3,
"imagePath": "/path/to/frame_0007.jpg",
"croppedImagePath": "/path/to/frame_0007_cropped.jpg",
"description": "黑色金属床底鞋架 可折叠移动"
},
"rerank": {
"keyword": "床底鞋架",
"results": [
{ "num_iid": 123, "title": "...", "price": "44.00", "sales": 87, "detail_url": "..." }
]
}
}
鉴权架构
~/.yuanwei/auth.json
apiKey ──→ 业务 API: Authorization: Bearer <apiKey>
modelBase ──→ 模型网关 baseURL
仅需配置统一平台 Key。业务接口和模型网关都使用同一个 apiKey 做鉴权和积分限制。
环境变量
| 变量 | 说明 |
|---|---|
~/.yuanwei/auth.json |
必需。 包含 apiKey、apiBase、modelBase |
VISION_MODEL |
覆盖模型名称 |
SKILL_SESSION_ID |
Langfuse session ID(自动生成,格式 skill-YYYYMMDD-HHMMSS-xxxx) |
TELEMETRY_ENDPOINT |
遥测上报接口 |
前置依赖
- Bun 运行时
- 系统 PATH 中包含
ffmpeg/ffprobe(帧提取)