🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

媒体库检索 xiaoyaoPanPan/dsh-media

DeepSeek Harness
xiaoyaoPanPan72 天前有提交已提供中文文档扫描:含敏感能力

自动打标挂载目录里的视频图片并语义检索

27.4/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiaoyaoPanPan/dsh-media
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/09·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 72 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 72 处,展示前 56 条)
  • 读取本地文件
    dsh-media-app/lib/bin.js:28
    if (!existsSync(SOURCE)) {
  • 读取本地文件
    dsh-media-app/lib/bin.js:32
    if (existsSync(DEST) && !force) {
  • 写入本地文件
    dsh-media-app/lib/bin.js:36
    mkdirSync(dirname(DEST), { recursive: true });
  • 读取本地文件
    dsh-media-app/src/bin.ts:36
    if (!existsSync(SOURCE)) {
  • 读取本地文件
    dsh-media-app/src/bin.ts:41
    if (existsSync(DEST) && !force) {
  • 写入本地文件
    dsh-media-app/src/bin.ts:48
    mkdirSync(dirname(DEST), { recursive: true })
  • 读取本地文件
    dsh-media-local/lib/index.js:287
    canonical = await realpath(absolute);
  • 读取本地文件
    dsh-media-local/lib/index.js:291
    if (!(await stat(canonical)).isDirectory()) throw new MediaError(`media root is not a directory: ${canonical}`, "INVALID_ROOT");
  • 读取本地文件
    dsh-media-local/lib/index.js:321
    canonical = await realpath(absolute);
  • 读取本地文件
    dsh-media-local/lib/index.js:546
    audioBytes = (await stat(audioPath)).size;
  • 读取本地文件
    dsh-media-local/lib/index.js:553
    bytes = await readFile(audioPath);
  • 发起网络请求
    dsh-media-local/lib/index.js:564
    response = await fetch(`${config.baseUrl.trim().replace(/ $/, "")}/audio/transcriptions`, {
  • 读取本地文件
    dsh-media-local/lib/index.js:990
    const entries = await readdir(dir, { withFileTypes: true });
  • 发起网络请求
    dsh-media-local/lib/index.js:1088
    const response = await fetch(`${config.baseUrl.replace(/ $/, "")}/chat/completions`, {
  • 删除本地文件
    dsh-media-local/lib/index.js:1205
    await rm(dir, {
  • 发起网络请求
    dsh-media-local/lib/index.js:1251
    response = await fetch(`${config.baseUrl.replace(/ $/, "")}/chat/completions`, {
  • 删除本地文件
    dsh-media-local/lib/index.js:3289
    await rm(dir, {
  • 写入本地文件
    dsh-media-local/lib/index.js:4299
    if (!dryRun) await mkdir(destRoot, { recursive: true });
  • 写入本地文件
    dsh-media-local/lib/index.js:4311
    await mkdir(dirname(destAbs), { recursive: true });
  • 写入本地文件
    dsh-media-local/lib/index.js:4312
    await copyFile(asset.path, destAbs);
  • 写入本地文件
    dsh-media-local/lib/index.js:4388
    await rename(source, archivePath);
  • 写入本地文件
    dsh-media-local/lib/index.js:4393
    await rename(organized, source);
  • 写入本地文件
    dsh-media-local/lib/index.js:4396
    await rename(archivePath, source);
  • 读取本地文件
    dsh-media-local/src/content-hash.ts:16
    const stream = createReadStream(filePath)
  • 写入本地文件
    dsh-media-local/src/index.ts:664
    async rename(
  • 写入本地文件
    dsh-media-local/src/index.ts:739
    await rename(contained, targetAbs)
  • 读取本地文件
    dsh-media-local/src/index.ts:746
    finalAbs = await realpath(targetAbs)
  • 读取本地文件
    dsh-media-local/src/index.ts:751
    const info = await stat(finalAbs)
  • 读取本地文件
    dsh-media-local/src/index.ts:1583
    const info = await stat(absolute)
  • 读取本地文件
    dsh-media-local/src/index.ts:2553
    currentReal = await realpath(currentAbs)
  • 读取本地文件
    dsh-media-local/src/index.ts:2566
    const existing = await realpath(candidateAbs)
  • 写入本地文件
    dsh-media-local/src/organize.ts:86
    await mkdir(destRoot, { recursive: true })
  • 写入本地文件
    dsh-media-local/src/organize.ts:104
    await mkdir(dirname(destAbs), { recursive: true })
  • 写入本地文件
    dsh-media-local/src/organize.ts:105
    await copyFile(asset.path, destAbs)
  • 读取本地文件
    dsh-media-local/src/organize.ts:106
    const info = await stat(destAbs)
  • 写入本地文件
    dsh-media-local/src/organize.ts:195
    await rename(source, archivePath)
  • 写入本地文件
    dsh-media-local/src/organize.ts:201
    await rename(organized, source)
  • 写入本地文件
    dsh-media-local/src/organize.ts:205
    await rename(archivePath, source)
  • 读取本地文件
    dsh-media-local/src/paths.ts:21
    canonical = await realpath(absolute)
  • 读取本地文件
    dsh-media-local/src/paths.ts:25
    const info = await stat(canonical)
  • 读取本地文件
    dsh-media-local/src/paths.ts:64
    canonical = await realpath(absolute)
  • 读取本地文件
    dsh-media-local/src/preview-http.ts:71
    const info = await stat(absolute)
  • 读取本地文件
    dsh-media-local/src/preview-http.ts:85
    createReadStream(absolute).pipe(res)
  • 读取本地文件
    dsh-media-local/src/scan.ts:275
    const entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    dsh-media-local/src/scan.ts:287
    const info = await stat(absolute)
  • 读取本地文件
    dsh-media-local/src/scan.ts:411
    const info = await stat(filePath)
  • 读取本地文件
    dsh-media-local/src/scan.ts:419
    const bytes = await readFile(filePath)
  • 发起网络请求
    dsh-media-local/src/scan.ts:450
    const response = await fetch(`${config.baseUrl.replace(/ $/, '')}/chat/completions`, {
  • 删除本地文件递归
    dsh-media-local/src/scan.ts:591
    await rm(dir, { recursive: true, force: true }).catch(() => {
  • 发起网络请求
    dsh-media-local/src/scan.ts:655
    response = await fetch(`${config.baseUrl.replace(/ $/, '')}/chat/completions`, {
  • 读取本地文件
    dsh-media-local/src/transcript.ts:78
    audioBytes = (await stat(audioPath)).size
  • 读取本地文件
    dsh-media-local/src/transcript.ts:85
    bytes = await readFile(audioPath)
  • 发起网络请求
    dsh-media-local/src/transcript.ts:96
    response = await fetch(`${config.baseUrl.trim().replace(/ $/, '')}/audio/transcriptions`, {
  • 读取本地文件
    dsh-media-local/src/vision-llm.ts:111
    const info = await stat(filePath)
  • 读取本地文件
    dsh-media-local/src/vision-llm.ts:127
    const bytes = await readFile(filePath)
  • 删除本地文件递归
    dsh-media-local/src/vision-llm.ts:340
    await rm(dir, { recursive: true, force: true }).catch(() => {
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 自动打标视频图片
  • 语义检索媒体
  • 系统打开与定位

README

由 DeepSeek 最新模型翻译生成
dsh-media 把挂载目录变成可检索的媒体库DeepSeek Harness(dsh)插件:视频 / 图片自动打标、语义检索,Agent 与 Web UI 都能用 中文 · English · Issues 10 秒安装(推荐:交给 AI)复制下面提示词,发给 Cursor / ChatGPT / Claude / DeepSeek Harness 等你正在用的 AI:请严格按 https://github.com/xiaoyaoPanPan/dsh-media/blob/main/INSTALL.md 把 dsh-media 装进本机 DeepSeek Harness 的 web profile。 硬性顺序(缺一步会失败): 1) 先确认当前 dsh web 实际使用的 home(环境变量 DSH_HOME,或默认 ~/.dsh / %USERPROFILE%\.dsh),再改对应 profiles/web/pnpm-workspace.yaml:写入 blockExoticSubdeps: false(不要删已有键)。
展开完整文档(README 剩余 1 节)
dsh-media
把挂载目录变成可检索的媒体库DeepSeek Harness(dsh)插件:视频 / 图片自动打标、语义检索,Agent 与 Web UI 都能用

中文 · English · Issues

10 秒安装(推荐:交给 AI)复制下面提示词,发给 Cursor / ChatGPT / Claude / DeepSeek Harness 等你正在用的 AI:请严格按 https://github.com/xiaoyaoPanPan/dsh-media/blob/main/INSTALL.md 把 dsh-media 装进本机 DeepSeek Harness 的 web profile。
硬性顺序(缺一步会失败):
1) 先确认当前 dsh web 实际使用的 home(环境变量 DSH_HOME,或默认 ~/.dsh / %USERPROFILE%\.dsh),再改对应 profiles/web/pnpm-workspace.yaml:写入 blockExoticSubdeps: false(不要删已有键)。
2) 再执行:dsh plugin --profile web add "github:xiaoyaoPanPan/dsh-media#path:dsh-media-app"
3) 若报 allowBuilds / ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED:把 pnpm 打印的整行键写入同一 pnpm-workspace.yaml,再重跑同一条 add。不要改插件源码。
4) 再执行:pnpm --dir "/profiles/web" exec dsh-media-setup-preset
5) 硬刷新或重启 dsh web,汇报每步成功 / 失败与原始报错。
装完后:确认 dsh web 已开,检查是否已有 supportsVision=true 的模型,并告诉我结果。
- 若有:先问我要不要接到「素材打标」;我同意后,在 Web UI 会话顶栏的 Image & video scan 控件里选用该模型再扫描。
- 若无:按 https://github.com/xiaoyaoPanPan/dsh-media/blob/main/SETUP-VISION.md 教我怎么加一个能看图的自定义模型(不要替我选定某一家平台),加完再问我是否接通。

更细的逐步说明:INSTALL.md。

或自己动手安装需要:官方 dsh、pnpm、已能打开的 dsh web。
顺序不能反:先改配置,再 add。
1)放开 git 传递依赖(pnpm 11 必需)打开 web profile 的 pnpm-workspace.yaml:
- 默认:~/.dsh/profiles/web/pnpm-workspace.yaml(Windows:%USERPROFILE%\.dsh\profiles\web\pnpm-workspace.yaml)
- 若启动时设置了 DSH_HOME:用 $DSH_HOME/profiles/web/pnpm-workspace.yaml

合并写入(保留原有内容): blockExoticSubdeps: false

不写这一步,常见报错:ERR_PNPM_EXOTIC_SUBDEP。
2)添加插件
dsh plugin --profile web add "github:xiaoyaoPanPan/dsh-media#path:dsh-media-app"

PATH 里没有 dsh 时:

npx -y --package @deepseek-ai/dsh dsh plugin --profile web add "github:xiaoyaoPanPan/dsh-media#path:dsh-media-app"

若报 allowBuilds:把 pnpm 打印的整行写进同一 pnpm-workspace.yaml 的 allowBuilds:,再重跑同一条 add。
3)安装 Agent Preset

pnpm --dir "${DSH_HOME:-$HOME/.dsh}/profiles/web" exec dsh-media-setup-preset
Windows PowerShell(默认 home):

pnpm --dir "$env:USERPROFILE\.dsh\profiles\web" exec dsh-media-setup-preset

自定义 DSH_HOME 时:
pnpm --dir "$env:DSH_HOME\profiles\web" exec dsh-media-setup-preset

4)刷新硬刷新或重启 dsh web(Ctrl/Cmd+Shift+R)。打标模型在 Web UI 会话顶栏的 Image & video scan 里选;细节见 SETUP-VISION.md。

怎么用第一次(只需一次)
1. 安装后重启 dsh web,选择 Agent Preset 「素材检索」(面向挂载素材目录:视觉打标、语义检索、系统打开与资源管理器定位)。
2. 挂载一个含图片 / 视频的目录作为工作区。
3. 在会话顶栏的 Image & video scan 里选一个支持图片输入的模型(打标模型),点扫描:插件会建立索引并给素材打上标签与描述。

日常
1. 在「素材检索」模式的新对话里,直接让 Agent「找一张……的照片 / 某个素材」,它优先用 media_search 检索。
2. 检索结果会在 媒体检索卡片 里展示(最佳匹配 + 其他候选)。
3. 想打开 / 定位到本机文件,让 Agent media_open / media_reveal(系统打开 / 资源管理器定位)。
4. 新素材进来后,回到顶栏 Image & video scan 再扫一次(或明确要求 media_reindex 重建索引)即可。

说明:
- 「素材检索」Preset 之外,默认编码 Preset 不含这些媒体工具;媒体检索卡片是最终答案的可视化。
- 打标用独立视觉模型,Agent 不会对已打标素材重复读图(省 token)。
- 视觉打标是可选能力:不接视觉模型也能用「只传路径」的语义检索 / 打开定位。

卸载

dsh plugin --profile web remove dsh-media-app
rm -rf "${DSH_HOME:-$HOME/.dsh}/.agent-presets/media"

PowerShell:
dsh plugin --profile web remove dsh-media-app
Remove-Item -Recurse -Force "$env:USERPROFILE\.dsh\.agent-presets\media" -ErrorAction SilentlyContinue

作者 xiaoyaoPanPan · Issues · MIT

给开发者

- 包:dsh-media / -local / -ui / dsh-tool-media / dsh-media-app(对外只装 app)。
- git / 预构建 lib/:OPENSOURCE.md · AI 安装:INSTALL.md · AI 配视觉:SETUP-VISION.md。
- 本地:dsh plugin --profile web add "file:./dsh-media-app",再跑 dsh-media-setup-preset。
预览分享卡片长什么样 ↓xiaoyaoPanPan/dsh-media
分享 · DeepSeek Harness Hub
xiaoyaoPanPan/dsh-media

自动打标挂载目录里的视频图片并语义检索

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部