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

媒体台 lemonhall/dsh-media-dock

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

DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方…

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · tool
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/5) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 18 条)
  • 执行外部命令来自配置/变量
    lib/index.js:105
    const child = spawn(exe, args, {
  • 读取本地文件
    lib/index.js:140
    if (configured && existsSync(configured)) return configured
  • 读取本地文件
    lib/index.js:147
    return readdirSync(dir)
  • 读取本地文件
    lib/index.js:152
    return statSync(path).isFile()
  • 写入本地文件
    lib/index.js:168
    mkdirSync(outputDir, { recursive: true })
  • 读取本地文件
    lib/index.js:311
    if (!existsSync(state) || !existsSync(cookies)) return null
  • 写入本地文件
    lib/index.js:314
    mkdirSync(join(target, 'Default', 'Network'), { recursive: true })
  • 写入本地文件
    lib/index.js:315
    copyFileSync(state, join(target, 'Local State'))
  • 写入本地文件
    lib/index.js:316
    copyFileSync(cookies, join(target, 'Default', 'Network', 'Cookies'))
  • 读取本地文件
    lib/index.js:446
    .filter((line) => line && !line.startsWith('[') && existsSync(line))
  • 读取本地文件
    lib/index.js:453
    return { path, mtime: statSync(path).mtimeMs, name: basename(path) }
  • 执行外部命令来自配置/变量
    lib/index.js:927
    child = spawn(opener, openerArgs, { windowsHide: true, detached: true, stdio: 'ignore' })
  • 发起网络请求
    lib/client.js:81
    return fetch(ROUTE_STATE)
  • 发起网络请求
    lib/client.js:105
    return fetch(ROUTE_STATE, {
  • 读取本地文件
    lib/state.js:35
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    lib/state.js:62
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    lib/state.js:64
    writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf8')
  • 写入本地文件
    lib/state.js:65
    renameSync(tmp, file)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • ffmpeg转码
  • 本地语音转写
展开完整介绍(105 字)↓

DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方 speechToText(SenseVoice)本地转写,字幕进面板,一键让 Agent 总结。

README

由 DeepSeek 最新模型翻译生成
dsh-media-dock 📺 DSH 右侧栏的媒体台 —— 把抖音 / YouTube 链接丢进来,本机下载、本机转写,字幕进面板,一键让 Agent 总结。 这是给 DSH(DeepSeek Harness) 右侧栏做的一排日常插件之一。 右侧栏本来就是 DSH 的「apps 入口」—— 官方的文件/终端/浏览器和第三方插件走完全同一套机制。 它解决的是什么 看一个 11 分钟的长视频,我想要的是它的文字,不是那 11 分钟。 而「视频 → 文字 → 总结」这条链,别人做不成:下载要本机 yt-dlp,转写要本机模型,总结要一个能读文件的 Agent —— 三样凑齐才有意义。所以它天然是个 DSH 插件,而不是一个网页工具。
展开完整文档(README 剩余 1 节)
dsh-media-dock 📺

DSH 右侧栏的媒体台 —— 把抖音 / YouTube 链接丢进来,本机下载、本机转写,字幕进面板,一键让 Agent 总结。

这是给 DSH(DeepSeek Harness) 右侧栏做的一排日常插件之一。
右侧栏本来就是 DSH 的「apps 入口」—— 官方的文件/终端/浏览器和第三方插件走完全同一套机制。

它解决的是什么

看一个 11 分钟的长视频,我想要的是它的文字,不是那 11 分钟。

而「视频 → 文字 → 总结」这条链,别人做不成:下载要本机 yt-dlp,转写要本机模型,总结要一个能读文件的 Agent —— 三样凑齐才有意义。所以它天然是个 DSH 插件,而不是一个网页工具。

流水线(每一步都踩过坑)

贴链接 / 按「📋 扒剪贴板」 ↓ ① yt-dlp 下载(走 video-download SKILL 那套:代理按站点、cookie 阶梯、重试) ↓ 优先抓现成字幕(零成本、最准) ↓ ② 没字幕才 ffmpeg → 16kHz 单声道 PCM16 WAV(按官方上限切段) ↓ ③ ctx.speechToText.transcribe()(SenseVoice,本地跑,中文强) ↓ ④ 字幕存进本插件状态 ↓ ⑤ 面板里点「让 Agent 总结」→ 直接在对话里开始总结

效果

面板

(图只截右侧栏面板。我这台机器桌面左下角有真名,所以截图从来不整屏。)

它能干什么

- 抖音 / YouTube / B站 / X 等(认不出站点也照样交给 yt-dlp —— 它支持 1000+ 站点)
- 两段式:先抓现成字幕(YouTube 大多有),没有才本地转写
- 长视频自动切段 —— 段长问官方要(maxAudioBytes / maxDurationSeconds),不拍脑袋
- 「📋 扒剪贴板」:刷抖音时点「分享 → 复制链接」,回来按一下直接开工
- 「让 Agent 总结」:走客户端 ISession.prompt,按下就在对话里开始(不是写个留言等我发现)
- media_panel 工具:add / list / read / status / retry / remove / clear —— Agent 能直接读字幕全文

依赖(三样)

| 依赖 | 作用 | 备注 |
| yt-dlp | 下载 + 抓字幕 | 本机已装(WinGet\Links\yt-dlp.exe) |
| ffmpeg | 转 16kHz 单声道 PCM16 WAV | 本机已装(chocolatey) |
| 官方 speechToText | 本地转写 | 可选 —— 没装就只能抓现成字幕 |

STT 是可选接入(按官方契约用 ctx.get('speechToText') + undefined 检查):装了就用 SenseVoice 本地转写,没装就只抓现成字幕,不会因为缺它而报错。

装

桌面版 GUI:右侧栏「插件 → 添加插件」→ 填 dsh-media-dock 或者 CLI:
dsh plugin --profile desktop add dsh-media-dock

开发者想用本地目录直接挂: plugin_manager install_bundle target=link:E:\development\dsh-media-dock

装完重启一次(界面半边在启动时固化),然后右侧栏点「+」选「媒体台」。

它是怎么work的

lib/index.js 宿主半:yt-dlp/ffmpeg 流水线 + 路由 + media_panel 工具 lib/url.js 纯函数:URL 解析 / 时长 / 切段 / 字幕清洗(36 项单测) lib/state.js 本地状态(原子写) lib/client.js 右侧栏 tab(整个模块包在 IIFE 里 —— DSH 把所有客户端插件拼成一个脚本,顶层 const 会跨插件撞名,实测撞过一次直接把应用挡在启动之外)

已知限制

- 抖音不能嵌在侧栏里看(X 大概率同理)。这不是"还没做",是四条路都试过、全堵,都实测过:

| 试的路 | 结果 |
| 侧栏 webview 开桌面版 | 页面外壳能加载、播放器一直"加载中" —— 它认出了 Electron 的 UA |
| 启动参数 --user-agent=<普通 Chrome> | 被应用自己的 setUserAgent 覆盖(UA 字符串里带 dsh-desktop),无效 |
| 插件里 import('electron') 改 session.defaultSession | 只拿到 npm 空壳包;createRequire 也 Cannot find module 'electron' |
| m.douyin.com / ?is_from_mobile_home=1 | 404(TLB)—— 移动页要移动 UA,同一把锁 |
| 换开发版的 web profile(那边是 ) | 抖音回 X-Frame-Options: DENY + CSP frame-ancestors 白名单,连页面都不给 |

根因只有一个:webview 的 User-Agent 由应用主进程设死,插件改不到。官方那个 browser tab 不归第三方管,而第三方自己渲染 <webview> 会白屏(实测)。所以:抖音走系统浏览器刷 + 「📋 扒剪贴板」扒字幕。
YouTube 完全不受影响 —— 能嵌、能播、直播都能播,可以真"边看边扒"。
- 抖音必须带 cookie(Fresh cookies (not necessarily logged in) are needed)。默认会自动把 Chrome 的 把 cookie 库复制成迷你 profile 再读(绕开 issue 7271 的锁,Chrome 开着也行);也可以配 cookiesFile 指向导出的 cookies.txt(最稳,不受 Chrome 运行状态影响)。
- 转写是有界的:官方限制 maxAudioBytes=4MB / maxDurationSeconds=120,所以长视频必然切段(11 分钟 = 7 段)。段与段是独立识别的,跨段的一句话可能被切断。
- 转写有听错:SenseVoiceSmall (INT8) 日常叙述很准,专业术语容易错(实测:共沸物 → "供废物"、辛烷值 → "锌烷值"、蔗渣 → "热扎"、葡语 → "普语")。
要更准要么换更大的模型,要么加术语纠正表。
- 不做:视频摘要之外的二次加工(剪辑/翻译/配音)、播放列表批量、字幕时间轴对齐。

踩过的坑(都写进代码注释了)

这个插件是这批里最折腾的一个,六个 bug 每个都是实测出来的:

1. client.download() 不是 async iterable(那是 imapflow 的坑)—— 类似地,yt-dlp --print 的路径在这台机器上压根没给出可用路径,得扫目录兜底;这个 bug 藏了很久,因为"现成字幕"那条路提前 return 了。
2. Invalid speech WAV:ffmpeg 默认往 WAV 里塞 LIST/INFO/ISFT "Lavf…" 元数据 chunk,官方校验的是规范 PCM16 —— 加 -fflags +bitexact -map_metadata -1。
3. Invalid speech audio size:我把段长拍成 180 秒(5.8MB),而官方上限是 4MB / 120 秒 —— 得问它要,不能猜。
4. 一个漏掉的 cookie 换了两张脸:探元数据那步没走 cookie 阶梯 → durationSec 变 0 → 切段算出空方案 → 退化成"整段当一段" → 又报大小错。看起来是大小问题,其实是探测问题。
5. 代理按站点:抖音/B站这类国内站点绝不能走代理;而且即使不走代理也要显式传 --proxy "",否则 yt-dlp 会读环境变量里的 HTTP_PROXY,等于偷偷走了。
6. "关窗口 ≠ 退进程":Chrome 关了窗口还剩 12 个进程,锁着 cookie 库 —— 所以要复制成迷你 profile。

License

MIT
预览分享卡片长什么样 ↓lemonhall/dsh-media-dock
分享 · DeepSeek Harness Hub
lemonhall/dsh-media-dock

DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方…

回到顶部