前言¶
在 DSH 里做内容发布,常见做法是让智能体「打开创作中心、点上传、填标题」——每一步都要碰真实浏览器和页面 DOM。平台改版、文件选择对话框挡在别的进程里、填表和可见性选项各站不一,很容易做到「看起来成功、其实没交上文件」。
下面介绍维护者 7gzgn 的工作流插件 dsh-douyin-publish(GitHub:7gzgn/dsh-douyin-publish)。它把一条本地视频从检查、可选混音、打开投稿页、把文件交给页面自带的上传控件,到填标题、文案、话题、可见性(抖音还可设封面帧),默认停在投稿按钮之前;只有你显式要求才会真发。
这是什么¶
dsh-douyin-publish(包名 dsh-douyin-publish,当前 README / package 对应版本 0.6.4)面向 DeepSeek Harness:在已登录的创作中心浏览器会话里,把本地视频一路送到投稿页的「表已填好、未点发布」状态。
- 维护者:7gzgn
- 分类:工作流(社区目录 SkillHub 插件页)
- 许可证:MIT
抖音、B 站已在真机核对;传未核对的平台(如 platform="xiaohongshu")会明确拒绝(platform-unsupported),不会用别的站的选择器硬点。
核心功能¶
保守默认值¶
发布不可逆且对外可见,插件刻意默认保守:
| 参数 | 默认 | 要改须显式传入 |
|---|---|---|
visibility |
private(仅自己可见) |
public / friends(平台不支持时会 visibility-unsupported) |
mode |
draft(不点投稿) |
mode: 'publish' |
想先看流程而不动页面,可用 dryRun: true。
从本地文件到页面上传¶
默认不走系统「打开文件」对话框,而是注入:
- 本机在
127.0.0.1随机端口起一个只读、单文件、带令牌的小服务; - 页面
fetch后通过DataTransfer造File,塞进input[type=file]并派发事件; - 后续走平台自己的上传逻辑,不弹窗、不挡人。
超过 maxInjectBytes(默认 512MB)或注入被 CSP/CORS 拦住时,才退回系统对话框(该退路在 README 中写明仅 Windows);退回时会回读校验,读不回来则判失败。
B 站投稿页存在多个 input[type=file],真正驱动上传的可能是隐藏控件;插件按 DOM 顺序尝试,并结合「编辑表单是否出现」判断,回执会说明塞进了第几个控件。
表单与平台差异¶
| 步 | 行为概要 |
|---|---|
| 检查视频 | 大小 / 分辨率 / 时长 / 编码(ffprobe,缺失不拦) |
| 可选配乐 | bgmPath + ffmpeg 混音(bgmVolume 默认 0.35);或 pickMusic: true 打开抖音曲库面板并聚焦搜索框(musicSearch 实验性,可能需人手输入) |
| 版式自检 | 上传页 / 编辑页关键控件缺一即报 layout-changed |
| 填表 | 标题整段写入并回读;抖音文案与 #话题 进简介,B 站话题进「标签」并回车 |
| 可见性 | 抖音三档;B 站「更多设置 → 可见范围」(无好友档) |
| 封面 | 仅抖音:coverTime 默认第 1 秒 |
| 投稿 | mode=draft 时跳过,回执记 skipped |
失败会分类返回,例如:no-browser、upload-page-timeout、edit-page-timeout、layout-changed、handover、bgm 等。
依赖与边界¶
- 必须有 DSH 浏览器插件(
ctx.browser);没有则明确报错。 - 可选:
ffprobe(无则少元信息)。 - 不做内容创作:剪片、封面图、完整文案管线不在此插件内;验证码 / 风控检测到会停下,请人在浏览器窗口处理。
安装与启用¶
市场收录后,在 DSH 里搜索 dsh-douyin-publish 安装。手动安装(摘自 README,路径需按本机调整):
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-douyin-publish" -Target "D:\dsh\projects\dsh-douyin-publish"
# profile 的 package.json:dependencies 加 "dsh-douyin-publish": "link:D:/dsh/projects/dsh-douyin-publish"
# 并把 "dsh-douyin-publish" 加进 dsh.profile.bundles(漏了不加载)→ 重启 DSH
发布前建议先做两件事:① 装好浏览器插件;② 在浏览器里登录对应平台创作中心(登录态在浏览器 profile,可跨重启复用)。
插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证,确认符合你的环境与安全要求。运行环境要求 Node >=18(见 package.json)。
典型用法¶
命令形态(摘自 README):
douyin_upload videoPath=D:\videos\a.mp4 [platform=douyin|bilibili] title="标题" \
[description="文案"] [topics="猫,狗"] [coverTime=1] [visibility=private] [mode=draft|publish] [dryRun]
配乐相关示例:
douyin_upload({ ..., pickMusic: true })
douyin_upload({ ..., pickMusic: true, musicSearch: "轻快" })
建议流程:先用 dryRun: true 看一眼 → 正式跑一遍(默认停投稿前)→ 在浏览器核对 → 确认后再 mode: 'publish'。
适用场景与注意¶
适合:已在 DSH 里接好浏览器会话、需要把固定流程(上传 + 填表 + 可见性)自动化、且希望默认不对外发布的创作者或集成开发者。
注意:
- 选择器绑定真机页版式(README 记载抖音 2026-10-16、B 站 2026-10-17 等),平台改版后需同步更新插件。
- 注入会把文件读进浏览器渲染进程,故有体积上限。
- 抖音话题为联想式,代填后以回读为准;B 站标签有 20 字上限提醒。
- 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。
仓库提供自测:node test/smoke.mjs(README 称 165 项,含假浏览器与回环服务断言)。
结尾¶
dsh-douyin-publish 的价值在于跑通「开页 → 交文件 → 填表 → 设可见性」整条链,并用 draft + private 把发布权留在你手里。进一步了解可看 SkillHub 目录页 与 GitHub 仓库。