dsh-douyin-publish:把本地视频送到抖音 / B 站投稿页「待发布」

前言

在 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。

从本地文件到页面上传

默认不走系统「打开文件」对话框,而是注入:

  1. 本机在 127.0.0.1 随机端口起一个只读、单文件、带令牌的小服务;
  2. 页面 fetch 后通过 DataTransfer 造 File,塞进 input[type=file] 并派发事件;
  3. 后续走平台自己的上传逻辑,不弹窗、不挡人。

超过 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜