Note
发布引擎基于 social-auto-upload,感谢 dreammis 与所有贡献者。
PostHub 是一个桌面端的多平台短视频发布工具。它把「一个视频发到抖音 / 小红书 / 视频号」这件重复又易触发风控的事,从逐平台手动操作变成一键或定时批量执行。
- 本地 Chrome 登录态:通过
connect_over_cdp接管每账号独立的真实浏览器,登录态随账号 user-data-dir 持久化 - 跨平台并行:发布任务展开成 N 个平台子任务,跨平台并行、同平台严格串行
- 人工介入兜底:验证码、需重登、错过排期等异常主动浮出来,不藏在深层菜单
- AI 内容声明透传:按平台分键(抖音
declaration/ 视频号original_statement/ 小红书source)写入,不靠 OCR 兜底(issue #43)
最新稳定版:v0.2.0(Release 页)
| 平台 | 安装包 | 大小 |
|---|---|---|
| macOS (Apple Silicon) | PostHub_0.2.0_aarch64.dmg |
19 MB |
| Windows (NSIS) | PostHub_0.2.0_x64-setup.exe |
246 MB |
| Windows (MSI) | PostHub_0.2.0_x64_en-US.msi |
343 MB |
Note
安装包未签名。macOS 首次打开需右键「打开」绕过 Gatekeeper;Windows 有 SmartScreen 提示,点「仍要运行」即可。
Warning
macOS 只出了 aarch64(Apple Silicon);Intel Mac 用户需自行从源码构建。
- 每账号 = 一台本机 Chrome(独立
user-data-dir+ 独立调试端口) - 「打开」拉起 Chrome 扫码登录,发布脚本接管真实浏览器,登录态靠 user-data-dir 持久化
- 账号级默认声明按平台分键,新建任务自动继承
- 官方素材库:上传视频或图片,发布时直接选取
- 文件夹批量导入:
manifest.json驱动多任务批量发布 - 矩阵批量(
BatchItem):每个视频独立标题、标签、账号组合,跨平台并发
- 任务管理页:发布进度、平台结果、人工介入状态都能直接看到
- 异常兜底:Tauri 弹窗 + 应用内通知 + 本地日志
- 调度器按平台约束执行(定时任务、单日累计、视频号软提示等)
- Python 守护进程常驻,本地 HTTP IPC(默认
127.0.0.1:5409) - 首次启动按需建 venv(
UV_PROJECT_ENVIRONMENT),冷启动 1–3 分钟后复用 - 引擎层基于 social-auto-upload(MIT),PostHub 不 fork 不改源码
┌─────────────────────────────────────────────────────────────┐
│ Tauri 2 桌面壳 (Rust) │
│ ├─ Windows 托盘 / macOS 菜单栏常驻 │
│ ├─ 拉起守护进程 + 健康检查 │
│ └─ 桌面通知 / 人工介入弹窗 │
├─────────────────────────────────────────────────────────────┤
│ WebView (React 19 + Vite + Tailwind v4 + shadcn/ui) │
│ ├─ 状态管理:Zustand │
│ └─ 路由:账号 / 任务 / 文件 / 批量发布 / 监控 │
├─────────────────────────────────────────────────────────────┤
│ Python 守护进程 (uv 管理) │
│ ├─ 本地 HTTP IPC(Flask + conf) │
│ ├─ 任务执行引擎 + 调度器 │
│ ├─ SQLAlchemy 状态机(SQLite) │
│ └─ uploader wrapper seam(PostHub 侧补 DOM / 声明透传) │
├─────────────────────────────────────────────────────────────┤
│ 发布引擎:social-auto-upload(patchright 驱动) │
│ ├─ 每账号独立 Chrome (--user-data-dir + 调试端口) │
│ └─ connect_over_cdp 接管真实浏览器 │
└─────────────────────────────────────────────────────────────┘
src-tauri/ Tauri 2 壳(Rust):托盘 / 菜单栏常驻、一键退出、开机自启
web/ React 19 前端(Zustand + Tailwind v4 + shadcn/ui),pnpm 管理
daemon/ Python 守护进程(uv 管理):本地 HTTP IPC + 执行引擎 seam
scripts/ 工程辅助脚本(图标生成、打包资源准备等)
docs/specs/ 平台约束与功能规格
docs/handoffs/ Issue 实现交付快照
Important
守护进程首次启动会在应用数据目录建 venv(联网拉依赖);如果网络受限,可提前在仓库内 cd daemon && uv sync 预热。
- 从上方「下载」获取安装包,安装到你的桌面
- 启动 PostHub,系统托盘 / 菜单栏出现图标
- 「账号管理」→「打开」拉起 Chrome,扫码登录抖音 / 小红书 / 视频号
- 「文件」上传视频或图片素材
- 「发布」填标题、标签、平台,一键发布;或建定时任务
发布约束(封面、声明、字数)见 docs/specs/。
前置:Rust / Node 18+ / pnpm / uv。
# Python 守护进程
cd daemon && uv sync && uv run pytest # 守护进程全量测试
uv run python -m posthub # 启动守护进程(默认 127.0.0.1:5409)
# 前端
cd web && pnpm install
pnpm run dev # Vite dev(端口 5173)
pnpm test # Vitest
pnpm exec tsc --noEmit # TypeScript 检查
# 桌面壳
cd src-tauri && cargo build # 编译调试版
cargo test # Rust 单元测试桌面壳 dev(项目根执行):web/node_modules/.bin/tauri dev 拉起前端 dev server + 桌面壳;壳启动时自动经 uv run --project daemon python -m posthub 拉起守护进程,前端即可看到连通状态。
- Python 操作必须用
uv:不裸用 pip / venv,依赖规范由pyproject.toml/uv.lock给出 - 发布引擎不 fork:需要自定义行为时在 PostHub 侧包一层(
daemon/posthub/declarations.py/uploader_wrapper.py) - 平台 UI 自动化很脆弱:改动前查
social-auto-upload/uploader/*当前结构,不要依赖私有 DOM 路径
# 1. 准备打包资源:staging daemon 源码(排除 .venv 等)+ 下载当前平台 uv 二进制
uv run --project daemon python scripts/prepare_resources.py
# 2. 构建安装包(项目根执行)
web/node_modules/.bin/tauri build产物:macOS src-tauri/target/release/bundle/dmg/*.dmg;Windows *.exe / *.msi(NSIS + MSI)。
CI:push v* tag 触发 .github/workflows/build.yml,mac/win 双端构建后自动 attach 到 GitHub Release。流程细节见 docs/deployment.md。
- social-auto-upload (MIT),发布引擎,被 PostHub 以依赖方式接入
MIT License,见 LICENSE。
