DouYin SparkFlow:抖音多账号续火花自动维护系统 · 最全部署与使用指南
一句话定位:GitHub 开源项目
halfwaystudent/douyin-sparkflow是一个自托管的抖音续火花工具——每天在你设置的发送窗口内,自动给选定的好友和群聊发一条消息,支持多账号、发送前巡查、结果推送和 Web 控制台。仓库地址:https://github.com/halfwaystudent/douyin-sparkflow · 许可证:PolyForm Noncommercial License 1.0.0(仅限非商业用途)
目录
- 一、官方跳转与下载链接
- 二、项目简介与核心能力
- 三、主界面预览(官方图片)
- 四、快速开始与部署
- 五、部署方式详解
- 六、使用流程与方法
- 七、功能模块详解
- 八、配置说明
- 九、服务器部署最佳实践
- 十、高级配置
- 十一、技术栈与项目结构
- 十二、免责声明与商业使用限制
- 十三、更新日志与项目状态
- 十四、常见问题排查
- 十五、参考链接汇总
一、官方跳转与下载链接
| 资源 | 链接 |
|---|---|
| GitHub 源码仓库 | https://github.com/halfwaystudent/douyin-sparkflow |
| 源码 ZIP 打包下载 | https://github.com/halfwaystudent/douyin-sparkflow/archive/refs/heads/main.zip |
| LICENSE(PolyForm 非商用) | https://github.com/halfwaystudent/douyin-sparkflow/blob/main/LICENSE |
| 使用文档(usage.md) | https://github.com/halfwaystudent/douyin-sparkflow/blob/main/docs/usage.md |
| 更新日志(CHANGELOG) | https://github.com/halfwaystudent/douyin-sparkflow/blob/main/CHANGELOG.md |
| 问题反馈(Issues) | https://github.com/halfwaystudent/douyin-sparkflow/issues |
| 社区讨论(Linux Do) | https://linux.do |
| Star History 页面 | https://star-history.com/#halfwaystudent/douyin-sparkflow&Date |
| Star History 图 | https://api.star-history.com/svg?repos=halfwaystudent/douyin-sparkflow&type=Date |
⚠️ 重要提示:本项目是非官方第三方开源项目,与抖音及其关联方不存在隶属、授权、赞助、代理或合作关系。使用者只能操作本人拥有或已获明确授权的账号,自动化操作可能导致验证、限流、功能限制、账号封禁等后果。
二、项目简介与核心能力
2.1 这是什么
DouYin SparkFlow(续火花 SparkFlow)是一个自托管的抖音火花(聊天互动标识)自动维护系统:在发送窗口内分批给选定的好友和群聊每天发一条消息,把"续火花"这件事完全自动化,还带完整的 Web 管理后台。
2.2 核心能力一览
| 能力分类 | 具体功能 |
|---|---|
| 🎯 续火花 | 每日自动发送、好友/群聊目标、消息模板(自定义/一言/节日祝福)、宁可不发也不重发 |
| 🚓 巡查与提醒 | 发送前只读巡查(登录有效性/账号身份/目标是否存在/是否改名)、失败与异常推送(Telegram/钉钉/企业微信/Webhook)、每日汇总 |
| 🔑 账号与登录 | 多账号集中管理、扫码或 Cookie 登录、身份绑定防串号、子用户权限隔离 |
| 🛠️ 技术特性 | FastAPI Web 控制台、Playwright 浏览器自动化、Docker 一键部署(x86 + ARM)、网络直连/Mihomo 回退、账号互斥锁 |
三、主界面预览(官方图片)
3.1 暗色模式

▲ 图 1:Web 管理控制台 - 今日概览(暗色主题,演示数据)——左侧功能导航(今日/发送明细/账号/登录/管理/设置/运行日志),右侧今日火花进度(今天还差 2 个火花、已发送 75% 6/8 个),下方各账号发送明细。
3.2 亮色模式

▲ 图 2:Web 管理控制台 - 今日概览(亮色主题,演示数据)
两张截图均来自项目官方 README,路径
DouYinSparkFlow/docs/images/screenshot-*.png。
四、快速开始与部署
4.1 前置要求
| 依赖 | 版本要求 | 用途 |
|---|---|---|
| Python | 3.10+(用了 X \| None PEP 604 语法,3.9 会导入报错) |
核心程序 |
| Node.js | 18+ | 协议发送通道 core/protocol_sender.mjs(可选,仅好友) |
| Docker + Compose | 最新版 | 容器部署(推荐) |
| 网络 | 稳定,可访问抖音 | 运行必需 |
| 抖音账号 | 你自己的 | 首次需在面板扫码登录(不附带任何账号/Cookie) |
4.2 快速开始(Docker 一键,官方推荐)
# 1. 克隆仓库
git clone https://github.com/halfwaystudent/douyin-sparkflow.git
cd douyin-sparkflow
# 2. 创建本地环境变量
cp .env.example .env
nano .env # 按需修改配置;可填 PROXY_SUB_URL(订阅地址,勿提交)
# 3. 初始化运行时文件并启动服务(自动创建 proxy/config.yaml)
bash ./deploy/install-local.sh
# Windows PowerShell 用:
# powershell -ExecutionPolicy Bypass -File .\deploy\install-local.ps1
# 4. 浏览器打开 Web 界面
# http://localhost:8787
服务端口说明:
| 端口 | 服务 | 绑定 |
|---|---|---|
8787 |
Web 管理控制台 | 默认全部网卡 |
8788 |
noVNC 登录桌面 | 默认仅 127.0.0.1 |
7890 / 9090 |
Mihomo 代理 / 控制端口 | 默认仅 127.0.0.1 |
服务器远程访问 noVNC(先建 SSH 隧道):
ssh -L 8788:127.0.0.1:8788 <user>@<server-ip>
然后浏览器打开:http://127.0.0.1:8788/vnc.html?autoconnect=1&resize=scale&view_only=0
Apple Silicon(M 系列):默认 Playwright 基础镜像同时支持 amd64 和 arm64,无需指定 platform。
五、部署方式详解
方式一:Docker Compose 一键部署(推荐,生产环境)
项目提供完整 Compose 编排,共 5 个服务:
| 服务 | 容器名 | 作用 |
|---|---|---|
| web | douyin-web |
Web 管理控制台 |
| login-desktop | — | 登录桌面服务(含浏览器环境) |
| proxy | — | Mihomo 代理(可选) |
| scheduler | — | 发送窗口定时调度 |
| task | — | 一次性发送任务 |
# 1. 准备环境变量
cp .env.example .env
# 2. 初始化 proxy/config.yaml 并启动所有服务
bash ./deploy/install-local.sh
# 3. 查看日志
docker compose logs -f
# 4. 停止服务
docker compose down
仅部署 Web 服务:
docker compose up -d web
定时任务由
scheduler容器直接运行/app/main.py --doTask,不再通过 docker exec 控制 web 容器,因此 scheduler 不需要挂载宿主机 Docker socket。旧部署的共享定时文件会在启动时自动迁移;更新脚本会备份并清理宿主机 root crontab 中旧的 Docker 发送任务,避免两套定时器同时运行。
方式二:本地开发运行
# 1. 克隆仓库
git clone https://github.com/halfwaystudent/douyin-sparkflow.git
cd douyin-sparkflow/DouYinSparkFlow
# 2. 安装依赖
pip install -r requirements.txt
pip install -r requirements-web.txt
# 3. 安装 Playwright 浏览器
playwright install chromium
# 4. 启动 Windows 本地登录浏览器(另开一个 PowerShell)
.\scripts\start_login_desktop.ps1
# 5. 启动 Web 服务(再开一个终端)
python main.py --web
# 6. 访问 http://localhost:8787
六、使用流程与方法
6.1 五步上手
| 步骤 | 操作 | 页面 |
|---|---|---|
| 1. 登录账号 | 扫码或粘贴 Cookie 登录抖音账号 | 「登录」页 |
| 2. 选择目标 | 刷新好友列表和群列表,勾选要续火花的好友和群 | 「账号」页 |
| 3. 配置任务 | 调整发送窗口、消息模板、推送通知 | 「设置」页 |
| 4. 查看进度 | 查看还差几个火花、下一轮发送时间、巡查结果 | 「今日」页 |
| 5. 处理异常 | 查看每个目标的发送结果并单独重试 | 「发送明细」页 |
6.2 好友与群聊目标
好友: - 在「账号」页点「刷新好友列表」后勾选,或每行手动填写一个昵称; - 勾选的好友按 UID 绑定,改昵称后自动跟随。
群聊:
- 点「刷新群列表」后勾选,列表显示为 群名(会话编号);
- 程序按编号找群并在发送前核对——群改名照常发送,有同名群也不会发错;
- 也可以不绑定编号直接填群名,此时要求群名在列表第一屏唯一,否则跳过;
- ⚠️ 群聊目标只支持浏览器发送通道,协议发送通道仅用于好友。
6.3 巡查与推送
- 巡查时机:每天发送窗口开始前半小时自动只读检查:登录是否有效、登录的是不是这个账号、目标好友和群是否还在、有没有改名;
- 巡查原则:不打开聊天、不发消息,纯只读;
- 手动巡查:在「账号」页点「立即巡查」,结果显示每个目标「找到 / 缺失 / 已改名」;
- 推送渠道:Telegram、钉钉、企业微信或通用 Webhook;同一问题每天只推一次,另有每日汇总。
七、功能模块详解
7.1 续火花(核心)
| 机制 | 说明 |
|---|---|
| 每日自动发送 | 发送窗口内分批发送,每个目标一天只发一次 |
| 好友目标 | 按好友 UID 绑定,改昵称自动跟随 |
| 群聊目标 | 按群会话编号绑定,群改名/同名群不发错 |
| 宁可不发,也不重发 | 发送前核对聊天对象,对不上就跳过并记录原因;结果不确定标"待核验",当天不自动重发 |
| 消息模板 | 自定义模板、一言(Hitokoto 随机诗词名言)、节日祝福;可设多条随机使用 |
7.2 发送确认分级(证据分级)
| 级别 | 含义 | 处理 |
|---|---|---|
| 强确认 | 服务端确认 | 正常完成 |
| 弱证据 | 页面回显 / 仅回执 | 大概率发出,没拿到服务端强确认;可在发送明细标记"待核验"让系统再发一次 |
| 待核验 | 结果不确定 | 当天不会自动重发,手动处理 |
7.3 消息模板
- 一言(Hitokoto):随机诗词、名言警句;
- 节日祝福:自动识别节假日,发送对应祝福语;
- 自定义消息:纯文本自定义。
发送策略:时间窗口(如 09:00–22:00)、可配置发送间隔与限速(降低操作频率和对接收方的打扰);发送失败按类别处理,可重试的在窗口内重试,结果不确定的标待核验。
八、配置说明
8.1 .env 环境变量(节选)
WEB_BIND_ADDRESS=0.0.0.0
WEB_PORT=8787
# noVNC 默认仅允许本机或 SSH 隧道访问
LOGIN_DESKTOP_BIND_ADDRESS=127.0.0.1
LOGIN_DESKTOP_WEB_PORT=8788
LOGIN_DESKTOP_PUBLIC_URL=/login-desktop/proxy/vnc.html?autoconnect=1&resize=scale&view_only=0&path=login-desktop/proxy/websockify
# 登录浏览器默认先直连抖音,直连失败时再尝试 Mihomo
LOGIN_DESKTOP_PROXY_MODE=auto
LOGIN_DESKTOP_PROXY=http://proxy:7890
# Mihomo 代理和控制端口默认仅绑定本机
PROXY_BIND_ADDRESS=127.0.0.1
PROXY_HTTP_PORT=7890
PROXY_CONTROLLER_PORT=9090
PROXY_SUB_URL= # 可选:Mihomo/Clash 订阅地址(含敏感 token,只写本地 .env)
网络策略:登录、好友刷新和发送任务默认"直连优先,Mihomo 回退"。LOGIN_DESKTOP_PROXY_MODE=auto 时登录浏览器先直连 creator.douyin.com,直连预检失败才走代理;没有配置有效订阅时,Mihomo 仅提供 DIRECT-only 配置。
8.2 config.json 应用配置(节选)
{
"messageTemplate": "✨今日火花+1\n",
"useProtocolSender": false,
"browserSenderAccounts": [],
"dailySendWindow": {
"enabled": true,
"startHour": 10,
"endHour": 18,
"scheduleIntervalMinutes": 20
},
"friendListScan": {
"maxScanSeconds": 300,
"idleScanSeconds": 120,
"scrollStepPx": 400,
"scrollDelaySeconds": 0.8
},
"persistentBrowserProfiles": {
"enabled": true,
"root": "/opt/douyin-sparkflow/state/browser-profiles",
"seedCookiesWhenEmpty": true,
"syncStoredCookiesBeforeRun": true,
"refreshStoredCookiesAfterLogin": true
}
}
usersData.json、webui_settings.json、浏览器 Profile、Cookie 和日志均为运行时敏感数据,不应提交到 Git。
九、服务器部署最佳实践
9.1 系统要求
| 项 | 最低要求 |
|---|---|
| CPU | 2 核心或以上 |
| 内存 | 2GB 或以上 |
| 存储 | 10GB 可用空间 |
| 系统 | Ubuntu 20.04+ / CentOS 7+ / Debian 10+ |
9.2 持久化数据卷
volumes:
- ./state:/app/state # 运行状态数据
- ./logs:/app/logs # 日志文件
- ./DouYinSparkFlow:/app # 应用代码(开发环境)
9.3 Nginx 反向代理示例
server {
listen 80;
server_name sparkflow.example.com;
location / {
proxy_pass http://localhost:8787;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
9.4 安全建议
- ✅ 首次访问面板时创建管理员账号,使用足够强的密码(系统不提供默认密码);
- ✅ 启用 HTTPS(Let's Encrypt);
- ✅ 配置防火墙规则;
- ✅ 定期备份
state/和usersData.json; - ✅ 使用环境变量管理敏感配置。
十、高级配置
10.1 代理配置
仓库提供 proxy/config.example.yaml 安全模板;部署脚本启动前生成本地 proxy/config.yaml:
mixed-port: 7890
allow-lan: true
mode: rule
# ... 更多见 proxy/config.example.yaml
PROXY_SUB_URL非空时,refresh_proxy.sh下载订阅并更新本地配置;为空则生成 DIRECT-only 配置;- ⚠️ 首次部署不要跳过初始化步骤直接
docker compose up -d,否则 Docker 可能把缺失的配置文件创建成目录; - Mihomo 控制接口(9090)需要密码:首次运行
refresh_proxy.sh(或 Windows 的install-local.ps1)生成随机密码,保存在state/proxy/controller-secret;想自己指定就在.env设置PROXY_CONTROLLER_SECRET(只能含字母数字和. _ ~ -)。
10.2 默认网络安全
- noVNC、Mihomo 代理端口和控制端口默认仅绑定
127.0.0.1; - 远程服务器请优先 SSH 隧道 / VPN / 带认证的 HTTPS 反向代理访问,不建议直接把 8788、7890、9090 暴露公网;
- Web 走 HTTPS 反向代理时可设
SPARKFLOW_SESSION_COOKIE_SECURE=1; - 宿主机 Docker Engine 较旧时可能需要显式指定
DOCKER_API_VERSION(如1.43)。
10.3 持续集成(GitHub Actions)
工作流 .github/workflows/tests.yml 在 push / PR / 手动触发时运行:Python 单元测试、字节码编译检查、Node 协议发送器测试。不使用 Secret、不启动浏览器、不发送任何消息——fork 和外部 PR 也能跑同一套检查。
早期曾有一个会在 GitHub 上执行真实发送的定时工作流(
schedule.yml),已在 2026-09 移除(云端机房 IP 发消息既不必要也易触发风控)。需要定时发送请用项目自带的调度(面板自动发送窗口 + 容器内 cron),运行在你自己的服务器上。
十一、技术栈与项目结构
11.1 技术栈
| 层 | 技术 |
|---|---|
| 后端框架 | FastAPI |
| 前端 | HTML5 + CSS3 + Vanilla JavaScript |
| 浏览器自动化 | Playwright(每账号独立持久化浏览器配置) |
| 容器化 | Docker + Docker Compose |
| 代理 | Mihomo(Clash Meta) |
| 任务调度 | scheduler 容器 + scripts/cron_runner.py |
| 模板引擎 | Jinja2 |
11.2 项目结构
douyin-sparkflow/
├── DouYinSparkFlow/ # 核心应用源码
│ ├── core/ # 核心功能模块
│ │ ├── tasks.py # 发送任务与调度(核心)
│ │ ├── streak_state.py # 每个目标的发送状态与失败分类
│ │ ├── friends.py # 好友列表读取
│ │ ├── friend_identity.py # 好友 UID 绑定与改名跟随
│ │ ├── groups.py # 群列表读取(只读)
│ │ ├── patrol.py # 发送前巡查(只读)
│ │ ├── notifications.py # 推送事件的去重与汇总
│ │ ├── identity.py # 抖音账号身份核对
│ │ ├── browser.py # 浏览器、持久化配置与账号锁
│ │ ├── login.py / cookies.py # 登录与 Cookie 校验
│ │ ├── msg_builder.py # 消息内容构建
│ │ └── protocol_*.{py,mjs} # 协议发送通道(可选,仅好友)
│ ├── webui/ # Web 控制台
│ │ ├── app.py # FastAPI 主应用
│ │ ├── auth.py / users.py # 登录认证与子用户
│ │ ├── ops.py # 运维与概览数据
│ │ ├── static/ # 静态资源(CSS/JS)
│ │ └── templates/ # HTML 模板
│ ├── utils/ # 配置、日志、推送渠道、一言等
│ ├── scripts/ # 定时任务与辅助脚本
│ ├── tests/ # 单元测试
│ ├── main.py # 主入口(--web / --doTask / --patrol)
│ └── login_desktop_server.py # 登录桌面服务
├── .github/workflows/ # GitHub Actions 测试(只跑测试,不发送)
├── deploy/ # 一键部署脚本
├── docs/ # 使用文档
├── proxy/ # 代理配置模板
├── docker-compose.yml # 容器编排配置
├── .env.example # 环境变量模板
└── README.md
十二、免责声明与商业使用限制
12.1 非官方项目声明
本项目为第三方个人项目,与抖音及其关联方不存在隶属、授权、代理、赞助、技术支持或合作关系。项目名称中的"抖音"仅用于说明兼容目标或使用场景。
12.2 使用授权与账号责任
- 使用者只能操作本人拥有或已获明确授权的账号;
- 不得使用他人未经授权的账号、Cookies、登录态、身份凭据或个人信息;
- 使用者应自行判断是否符合法律法规、抖音用户协议及平台规则。
12.3 平台风险
抖音可能随时调整服务、接口、页面、风控策略和用户协议。自动化操作可能导致验证码、限流、功能限制、账号异常、账号封禁、登录态失效或其他平台处理。本项目不保证平台兼容性、持续可用性或账号安全,也不提供规避平台风控的保证。
12.4 商业使用限制(PolyForm 非商用 1.0.0)
未经版权持有人事先书面授权,禁止将本项目用于: - 收费软件、收费脚本、收费镜像或收费部署服务; - SaaS、托管服务、代运营或客户账号管理; - 企业、品牌、店铺、主播或其他商业账号运营; - 广告投放、商业推广、营销获客或客户维护; - 将本项目集成到商业产品、商业平台或付费课程; - 以部署、维护、代发、运营等方式向第三方收取费用; - 其他直接或间接服务于营利性活动的场景。
如需商业使用,请事先联系版权持有人取得书面商业授权。
十三、更新日志与项目状态
最近更新(2026-10): - 💬 支持群聊目标:刷新群列表、勾选后按会话编号绑定,发送前核对,巡查也会检查群; - 🚓 新增发送前巡查:检查登录状态、账号身份和目标是否还在; - 🪪 好友按 UID 绑定,改昵称后自动跟随; - 🔔 新增推送通知:Telegram、钉钉、企业微信、通用 Webhook; - 🧑🤝🧑 支持子用户,各自管理分配给自己的抖音账号; - 📱 登录支持 Cookie,扫码登录保存后在后台验证; - 🐳 默认镜像同时支持 x86 和 ARM(Apple Silicon)。
项目状态:作为个人项目维护,暂不接受外部 Pull Request;发现问题或建议可提交 Issue。
十四、常见问题排查
| 问题 | 原因与处理 |
|---|---|
| 导入报错 | Python 需 3.10+(PEP 604 语法 X \| None 在 3.9 报错) |
| 首次部署后服务异常 | 不要跳过初始化直接 docker compose up -d——缺失配置文件会被创建成目录;先跑 install-local.sh |
| noVNC 无法访问 | 8788 默认只绑 127.0.0.1,远程需 SSH 隧道:ssh -L 8788:127.0.0.1:8788 <user>@<server-ip> |
| Mihomo 控制口 9090 拒绝 | 需要密码:cat state/proxy/controller-secret |
| 想自己定代理 | .env 填 PROXY_CONTROLLER_SECRET(仅字母数字和 . _ ~ -),再跑一次 refresh_proxy.sh |
| 好友改名后找不到 | 按 UID 绑定,刷新后自动跟随;巡查结果显示"已改名" |
| 同名群聊发错 | 刷新群列表后按会话编号绑定,发送前核对,有同名群也不发错 |
| 发送结果不确定 | 弱证据目标可在发送明细标记"待核验",系统会再发一次 |
| 担心风控 | 设置合理发送窗口与间隔限速;不保证规避风控,也不保证账号不受平台处理 |
| 商业用途 | PolyForm 非商用许可,商业使用需书面授权 |
十五、参考链接汇总
免责声明:本文所有命令、规则、数据均整理自官方 GitHub 仓库
halfwaystudent/douyin-sparkflow的 README 与官方文档原文,如仓库更新请以最新版本为准。本项目非抖音官方项目,使用请遵守 PolyForm 非商用许可、抖音用户协议及相关法律法规。