MatrixMedia 是一款开源的多平台视频矩阵发布工具,基于 Electron + Puppeteer,支持一键将视频同步到抖音/快手/视频号/B站/百家号/头条等平台。本次 v0.11.6 更新的主角,是视频号发布场景里一个很具体的痛点:发布视频时挂载小程序短剧或视频号原生剧集。
这次更新解决了什么
做短剧分发的同学应该都熟悉这个流程:视频号后台发布页里,把「第三方属性」从「无」切到「小程序短剧」或「视频号剧集」,在弹窗里按名称搜索,点中候选行,发布页回显剧名,挂载才算完成。手动做不难,但矩阵化、批量化之后就变成了重复劳动,而且之前自动化工具对这两类链接的支持是缺失的——能力表里只开放了商品挂载。
v0.11.6 把 MINI_DRAMA 和 SPH_SERIES 两种链接类型的 automationSupported 改为 true,GUI、CLI、HTTP、MCP 四条路径全部打通。前提是你的视频号账号本身有对应挂载权限(后台能选到该选项),短剧与剧集互斥,一次发布只挂一种。
先谢贡献者
这个功能来自社区贡献者 ababa00(GitHub 主页:github.com/ababa00 )的 PR #18,这也是 MatrixMedia 收到的第一个大型功能 PR——一次性带来约 1700 行新代码、完整的文档(docs/sph-links.md)和两个测试脚本,commit message 写得比很多正式员工都规范。开源项目能走到今天,靠的就是这样的贡献,感谢 ababa00。
技术实现亮点与踩坑
这个 PR 里最值得掘金读者看的不是"点了个按钮",而是视频号发布页这套 DOM 有多难伺候。几个关键点:
1. shadow DOM 穿透定位。 视频号发布页大量使用 shadow DOM,常规选择器根本够不着目标元素。新增的 sphLinkDom.js(775 行)集中处理 shadow DOM 穿透、弹窗定位与失败诊断,失败时会打印一行 [sph][link][诊断] JSON,包含链接类型菜单的真实文案、弹窗输入框 placeholder、候选行的 data-row-key——平台改版时按诊断日志改配置常量即可,不用重写流程。
2. antd 固定列的隐藏克隆行。 选择弹窗是 antd 表格,固定列机制会为同一行渲染一份隐藏副本:5 部剧能查出 10 个 .drama-row。如果无脑点第一个,很可能点到不可见的克隆行上,挂载静默失败。修复方式是候选行优先点击真正可见的那一行。
3. 弹窗可见性不能只看 computed display。 发布页常驻 30 多个 .weui-desktop-dialog 残留实例,隐藏实例自身的 computed display 并不是 none,只有祖先 .weui-desktop-dialog__wrp 是 display:none。判断可见性必须沿祖先链检查,否则会误操作隐藏实例。
4. 遮罩残留吞掉「保存草稿」按钮。 这是本次修掉的一个真 bug:链接挂载失败走「转存草稿」兜底时,失败残留的选择弹窗遮罩(.weui-desktop-mask)会盖住底部「保存草稿」按钮,点击被吞掉,草稿没保存却仍按已保存上报。修复后由挂载方在抛错前先关闭自己打开的弹窗与遮罩,兜底链路才真正可靠。同时明确成功判据是发布页回显(.choose-content .name 非空),而不是弹窗按钮状态——那个「确定」按钮在此模式下恒为 disabled,把它当必需步骤会误报失败。
5. 流程工厂抽象。 短剧和剧集的自动化流程完全一致:类型菜单 → 选择弹窗 → 按名称搜索 → 点行 → 回显校验。sphEntityLink.js 把这条流程抽成工厂,短剧(sphDrama.js)与剧集(sphSeries.js)各自只提供文案候选常量(链接类型文案、弹窗标题、搜索框 placeholder 等)。以后平台改版或新增链接类型(比如公众号文章开放自动化),只需加一个配置模块,流程零改动。
失败语义也值得一提:挂载任何一步失败都不会直接发布,而是等视频处理完成后自动转存草稿,返回 status: needs_attention、CLI 退出码 4。「挂了但没挂上」不会被误报为发布成功,也不会丢视频。
三种接入方式
GUI:视频管理 → 选择视频发布 → 下一步 → 第三方属性,下拉切到「小程序短剧」或「视频号剧集」,填入剧名。
CLI(推荐先加 --draft 核对;注意参数值填的是名称而非编号):
# 小程序短剧(打包版对应 "矩媒.exe" / 矩媒.AppImage)
electron . cli publish -p sph --phone 13800138000 -f /path/to/video.mp4 \
-t "短剧第一集" --draft --sph-drama-id 泳陷错恋
# 视频号剧集
electron . cli publish -p sph --phone 13800138000 -f /path/to/video.mp4 \
-t "短剧第一集" --draft --sph-series-id 儿媳给我办寿宴
参数名保留 -id 后缀是为了兼容既有脚本,实际取值是发布页弹窗列表里看到的名称;传编号会搜不到目标,命令不报错但走转存草稿兜底。也支持等价写法 --sph-link-type mini_drama|sph_series --sph-link-value <名称>。
HTTP / MCP:新增 sphDramaId / sphSeriesId 两个快捷字段,或完整对象形式:
{
"platformOptions": {
"sph": { "link": { "type": "mini_drama", "value": "泳陷错恋" } }
}
}
MCP 的 publish_video 工具同样接受 sphDramaId / sphSeriesId / sphLink,方便接入 AI Agent 编排。
同期其他更新
顺带提几句近几个版本的亮点:v0.11.4 上线了发布失败自动截图,在视频管理里点失败次数即可回看现场截图,排查失败原因不用再靠猜;v0.11.1 新增 macOS arm64 打包,M 系列芯片用户可以直接用原生构建;7 月底还上线了基于 VitePress 的新官网(GitHub Pages 托管)。
最后
MatrixMedia 目前 GitHub Star 已到 850+,项目采用 GPL-2.0 协议,代码、文档、测试都在仓库里。ababa00 的 PR #18 证明了这个项目欢迎实打实的功能贡献——如果你也被某个平台的发布自动化折磨过,欢迎试用、提 issue、提 PR。
短剧/剧集挂载的实现细节与排查清单见仓库文档 docs/sph-links.md。