Evil0ctal /Douyin_TikTok_Download_API
🚀 自托管的抖音、TikTok、B 站数据采集与无水印视频下载 API,支持 AI agent 通过 MCP 调用与离线语音转文字,Docker 一键部署。| Self-hosted TikTok, Douyin & Bilibili scraper and no-watermark video downloader — async REST API, MCP server for AI agents, CLI and web console, plus offline speech-to-text for downloaded videos. Self-healing identity pool, PostgreSQL archive, one docker compose up.
★ 21,326⑂ 2,961
21,326
stars
+193+214+759
2,961
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
Douyin_TikTok_Download_API
English | 简体中文
🚀 自部署的抖音 / TikTok / B 站(哔哩哔哩)数据接口服务。一条 docker compose up,自动维护身份池,对外提供 REST API、MCP 与 Web 控制台。
开源、免费、跑在你自己的机器上 —— 不用注册、没有配额、链路上没有第三方。它能取作品、作者和评论,音乐、话题、直播间、热榜和搜索结果,下载视频和图集时拿到的是无水印的流(它挑的是平台本来就提供的那条干净流,而不是「去掉」了什么),采集到的内容存在你自己的 PostgreSQL 里。下载下来的视频可以在同一台机器上离线转成文字,AI agent 也能通过 MCP 直接调用这一切。
💖 赞助商
这些赞助商已付费放置在这里,Douyin_TikTok_Download_API 项目将永远免费且开源。如果您希望成为该项目的赞助商,请查看我的 GitHub 赞助商页面。
TikHub.io
你的一站式社交媒体数据与 API 市场
为抖音、小红书、TikTok、Instagram、YouTube、Twitter 等平台提供专业数据方案。
实时数据 · 灵活接口 · 无缝集成 · 有竞争力的价格与折扣
在 TikHub.io 市场买卖定制 API、服务与社交媒体解决方案,
加入一个由开发者、企业与内容创作者组成的活跃生态。
多家全球领先的红人营销与社交媒体情报平台正在使用
→ 前往 TikHub.io
·
API 文档
🧩 REER —— 逆向工程交流论坛
reer.dev
一个放东西的地方。这个项目之所以存在,是因为有人把「某个签名是怎么构造出来的」写了下来;
论坛是为了下一轮这种事 —— 签名、协议、加壳,凡是被拆开过的都算。
免费、无广告,除了显而易见的那几条之外基本没有条款限制。中英双语,注册即可发布,不设门槛。
🎬 长这样
一次真实的调用:粘链接、发请求、拿到归一化后的结果,途中经过的身份池、调度器和接口文档都在同一个控制台里。
界面跟着浏览器语言走,中英文都是手写的,不是机翻。English UI
不用装任何东西就能试
是一个对所有人开放的在线实例。登录进去即可 —— 登录页会替你
填好演示账号 —— 然后随便用:调试台、调度器、资料库、接口文档。同一个账号还带一把
API Key,可以直接调爬虫接口,在 API Key 页面上是明文显示的。
它是只读的。演示请求不写入请求日志和归档库,所以一个公开实例的数据库不会被陌生人撑爆;
关掉演示模式,所有演示会话立即失效,那把 Key 也立刻作废。
限流:每 10 秒 30 次请求。 超了会进入 10 秒冷却,期间你的任何请求都会被拒绝。
这是一台共用的实例,它背后的身份池是所有人同时使用时的上限。
演示站的用途是帮你判断要不要自己部署一套。它不是一个可以拿来对接的服务 —— 它可能挂、
可能被重置、也可能被关掉,而且不会提前通知。
🚀 v4 与 v5
v5 是一次重写,从空分支起步,没有继承 v4 的任何代码。
v4 最大的问题从来不是功能少,而是接口会悄悄死掉,而你不知道。Cookie 过期、签名算法变更、
某个接口被风控,通常都要等到有人来提 issue 才发现。v5 把"看得见"和"能自愈"排在功能前面。
| | v4 | v5 |
|---|---|---|
| 身份从哪来 | 从浏览器里抠 Cookie,粘进 config.yaml | 无头浏览器自动铸造游客身份,可用数不够时自己补 |
| 请求怎么发 | 有请求就发出去 | 健康度分层、量化 LRU 轮换、每身份独占锁、每(身份,接口)令牌桶、接口级熔断 |
| 出了问题 | 等别人报错 | 每次请求一条结构化记录,身份和接口都有实时健康度,控制台上看得见 |
| 调用方式 | 同步,发出去等着 | 默认异步(202 + task_id),加 ?wait= 就退回同步 |
| 数据留存 | 解析完即弃 | PostgreSQL + Redis;解析过的内容自动归档,平台删了这里还在 |
| 访问控制 | 没有,谁都能调 | API Key + 作用域 + 角色,控制台里管 |
| 界面 | PyWebIO 单页 | React 控制台:身份池、调度器、资料库、下载、日志、诊断 |
| 接入方式 | REST | REST + MCP + CLI,共用同一个 service 层 |
| 签名 | X-Bogus、A_Bogus | a_bogus、X-Bogus、X-Gnarly、X-Dynosaur 和 B 站的 WBI,纯 Python 实现,另有浏览器兜底 |
| 部署 | pip install -r requirements.txt + python start.py | docker compose up,三个镜像 |
| 平台 | 抖音、TikTok、哔哩哔哩 | 抖音、TikTok、B 站 |
B 站曾经是 5.0 唯一退步的一项,因为它和抖音 / TikTok 不共用签名和身份体系。5.1.6
把它加了回来,也补上了它自己需要的两样东西:纯 Python 的 WBI 签名,以及通过普通 HTTP
铸造的游客身份——所以 B 站的身份池不需要浏览器容器。
还在用 v4?
v4 的代码保留在 v4 分支,
镜像也还在推,一条命令就能起:
bash
docker run -d --name dtk-v4 --restart unless-stopped \
-p 8080:80 evil0ctal/douyin_tiktok_download_api:V4.1.2
然后打开 ,接口文档在 /docs。端口特意错开成 8080,v5 占的是
8000,两个版本可以在同一台机器上一起跑。
用之前先把抖音 cookie 换掉。 v4 没有身份池,镜像里那份 cookie 是打包时带的,早就
过期了,不换的话抖音那边一律返回 400:
bash
docker cp dtk-v4:/app/crawlers/douyin/web/config.yaml ./douyin-web.yaml
把文件里的 Cookie 换成浏览器里的,保存
docker rm -f dtk-v4
docker run -d --name dtk-v4 --restart unless-stopped -p 8080:80 \
-v "$PWD/douyin-web.yaml:/app/crawlers/douyin/web/config.yaml" \
evi