280개 이상의 piece를 MCP 서버로 노출하는 오픈소스 AI 워크플로 자동화.
한국어는 runchr 제공 번역입니다. 원문 README는 English tool page.
Douyin_TikTok_Download_API
TikTok, Douyin, Bilibili 게시물, 댓글, 트렌드를 스크래핑하고, 워터마크 없는 동영상을 다운로드하며, 아카이빙하는 셀프 호스팅 REST API 및 MCP 서버
- Transport
- stdio
- Package
- Douyin_TikTok_Download_API
- Version
- latest
- Website
- https://douyin.wtf
프로젝트 README (번역)
GitHub ↗Written by the project's own authors, not by runchr. Snapshot taken 2026-10-28.
Douyin_TikTok_Download_API
영어 | 简体中文
🚀 Douyin, TikTok, Bilibili를 위한 셀프 호스팅 데이터 API. 한 번의 docker compose up, 스스로 유지되는 아이덴티티 풀, 그리고 그 위에 REST API, MCP 서버, 웹 콘솔이 올라갑니다.
오픈 소스이고 무료이며, 당신의 머신에서 실행됩니다 — 가입도, 할당량도, 중간에 끼어드는 사람도 없습니다. 게시물, 작성자, 댓글, 사운드, 해시태그, 라이브 룸, 트렌딩 보드, 검색 결과를 가져오고, 워터마크 없이 비디오와 이미지 앨범을 다운로드하며(무언가를 제거하는 것이 아니라 플랫폼이 이미 게시하는 깨끗한 스트림을 고릅니다), 수집한 것을 당신의 PostgreSQL에 보관합니다. 다운로드한 비디오는 같은 머신에서 오프라인으로 텍스트로 변환할 수 있고, AI 에이전트가 MCP를 통해 이 모든 것을 구동할 수 있습니다.
💖 스폰서
이 스폰서들은 여기에 있기 위해 비용을 지불했고, 그 덕분에 Douyin_TikTok_Download_API는 무료 오픈 소스로 유지됩니다. 프로젝트를 후원하려면 제 GitHub Sponsors 페이지를 참고하세요.
TikHub.io
당신의 궁극적인 소셜 미디어 데이터 & API 마켓플레이스
Douyin, Xiaohongshu, TikTok, Instagram, YouTube,
Twitter 등을 위한 전문 데이터 솔루션.
실시간 데이터 | 유연한 API | 매끄러운 통합 | 할인과 함께 경쟁력 있는 가격
개발자, 기업, 콘텐츠 크리에이터와 함께
TikHub.io 마켓플레이스에서 커스텀 API, 서비스, 소셜 미디어 솔루션을 사고파세요.
세계적인 인플루언서 마케팅 및 소셜 미디어 인텔리전스 플랫폼이 신뢰합니다
→ TikHub.io 방문
·
API 문서
🧩 REER — 리버스 엔지니어링을 위한 포럼
reer.dev
당신이 알아낸 것을 둘 곳. 이 프로젝트가 존재하는 이유는 누군가가
시그니처가 어떻게 만들어지는지 적어 두었기 때문입니다; 이 포럼은 그다음 라운드를 위한 곳입니다 — 시그니처,
프로토콜, 패커, 분해한 무엇이든.
무료이고, 광고도 없으며, 명백한 것 외에는 거의 규칙이 없습니다. 이중 언어, 영어
와 중국어. 등록하고 글을 쓰세요; 아무것도 막혀 있지 않습니다.
🎬 실제 모습
실제 호출 하나: 링크를 붙여넣고, 보내고, 정규화된 결과를 돌려받습니다. 아이덴티티 풀,
스케줄러, 그리고 그 과정에서 거쳐 간 API 레퍼런스가 모두 같은 콘솔에 있습니다.
인터페이스는 브라우저의 언어를 따르며, 둘 다 기계 번역이 아니라 손으로 작성되었습니다. 中文界面
아무것도 설치하지 않고 사용해 보기
https://demo.douyin.wtf 는 누구에게나 열려 있는 라이브 인스턴스입니다. 로그인하세요 — 로그인 페이지가
데모 계정을 대신 채워 줍니다 — 그리고 콘솔을 사용하세요: 플레이그라운드, 스케줄러,
라이브러리, API 레퍼런스. 같은 계정에는 스크래핑 엔드포인트를 호출할 수 있는 API 키가 함께 제공되며,
API keys 페이지에 평문으로 표시됩니다.
읽기 전용입니다. 데모 요청은 요청 로그나 아카이브에 기록되지 않으므로, 공개 인스턴스의
데이터베이스가 낯선 사람들로 채워질 수 없고, 데모 모드를 끄면 모든 데모 세션이 종료되고 키가 즉시 무효화됩니다.
속도 제한: 10초당 30 요청. 초과하면 10초 동안 쿨다운되며, 그동안 모든 요청이 거부됩니다.
공유 인스턴스이며, 그 뒤의 아이덴티티 풀이 동시에 사용하는 모든 사람의 상한입니다.
데모의 목적은 당신이 직접 운영할지 결정하는 것입니다. 그 위에 무언가를 만들기 위한 서비스가 아닙니다 — 내려가거나, 초기화되거나, 꺼질 수 있으며, 그중 어느 것도 공지되지 않습니다.
🚀 v4 vs v5
v5는 재작성입니다. 빈 브랜치에서 시작했고 v4 코드를 물려받지 않았습니다.
v4의 진짜 문제는 기능 부족이 결코 아니었습니다 — 문제는 API가 조용히 죽어도 아무도 모른다는 것이었습니다. 쿠키가 만료되고, 시그니처 알고리즘이 바뀌고, 엔드포인트가 속도 제한에 걸리는데, 누군가 이슈를 올릴 때에야 알게 됩니다. v5는 "당신이 볼 수 있다"와 "스스로 치유된다"를 기능보다 앞에 둡니다.
v4
v5
아이덴티티의 출처
브라우저에서 쿠키를 복사해 config.yaml에 넣음
헤드리스 브라우저가 게스트 아이덴티티를 발급하고, 사용 가능한 것이 부족해지면 풀이 스스로 보충됨
요청이 나가는 방식
도착하는 대로 곧바로 나감
헬스 티어, 양자화된 LRU 로테이션, 아이덴티티당 하나의 인플라이트 락, (아이덴티티, 엔드포인트)당 토큰 버킷, 엔드포인트당 서킷 브레이커
무언가 고장 났을 때
버그 리포트를 기다림
요청당 하나의 구조화된 레코드, 모든 아이덴티티와 엔드포인트의 실시간 헬스, 콘솔에서 확인 가능
호출 방식
동기 — 보내고 기다림
기본적으로 비동기( 202 + task_id ); ?wait= 를 붙이면 동기로 돌아감
보관되는 것
없음; 파싱하고 버림
PostgreSQL + Redis. 파싱된 모든 것이 아카이브되므로, 업스트림에서 삭제된 게시물도 여기에 남음
접근 제어
없음; 누구나 호출 가능
콘솔에서 관리되는 스코프와 역할을 가진 API 키
인터페이스
단일 PyWebIO 페이지
React 콘솔: 아이덴티티 풀, 스케줄러, 라이브러리, 다운로드, 로그, 진단
진입 경로
REST
REST, MCP, CLI, 모두 같은 서비스 계층 위에서
서명
X-Bogus, A_Bogus
순수 Python으로 a_bogus, X-Bogus, X-Gnarly, X-Dynosaur, Bilibili의 WBI, 브라우저 폴백 포함
배포
pip install -r requirements.txt + python start.py
docker compose up , 세 개의 이미지
플랫폼
Douyin, TikTok, Bilibili
Douyin, TikTok, Bilibili
Bilibili는 5.0에서 유일하게 후퇴한 부분이었습니다. Douyin, TikTok과 서명도 아이덴티티 기제도 공유하지 않기 때문입니다. 5.1.6에서 돌아왔으며, 직접 작성해야 했던 두 가지를 갖췄습니다: 순수 Python으로 구현한 WBI 서명, 그리고 평범한 HTTP로 발급되는 게스트 아이덴티티로, Bilibili 풀에는 브라우저 컨테이너가 필요 없습니다.
아직 v4를 쓰고 있나요?
v4의 코드는 v4 브랜치 에 남아 있고,
이미지는 여전히 게시되며, 한 명령으로 띄울 수 있습니다:
docker run -d --name dtk-v4 --restart unless-stopped \
-p 8080:80 evil0ctal/douyin_tiktok_download_api:V4.1.2
그다음 http://localhost:8080 을 여세요; API 레퍼런스는 /docs 에 있습니다. 포트 8080은 의도된 것입니다 — v5는 8000을 바인딩하므로, 두 버전이 한 머신에서 나란히 실행될 수 있습니다.
사용하기 전에 Douyin 쿠키를 교체하세요. v4에는 아이덴티티 풀이 없고, 이미지에 박혀 있는 쿠키는 오래전에 만료되었으므로, 직접 넣기 전까지 Douyin 엔드포인트는 400을 응답합니다:
docker cp dtk-v4:/app/crawlers/douyin/web/config.yaml ./douyin-web.yaml
# replace the Cookie line with one from your browser, then save
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 " \
evil0ctal/douyin_tiktok_download_api:V4.1.2
TikTok의 두 설정 파일은 /app/crawlers/tiktok/web/config.yaml 과 /app/crawlers/tiktok/app/config.yaml 에 있으며, 같은 방식으로 마운트합니다.
Compose로 유지하려면 파일 하나면 충분합니다 — douyin-web.yaml을 이미 옆에 복사해 두었거나, 그렇지 않으면 Docker가 그 이름으로 디렉터리를 만들어 앱이 설정을 읽지 못합니다:
# compose.yml
services :
app :
image : evil0ctal/douyin_tiktok_download_api:V4.1.2
container_name : dtk-v4
restart : unless-stopped
ports :
- " 8080:80 "
environment :
TZ : Asia/Shanghai
volumes :
- ./douyin-web.yaml:/app/crawlers/douyin/web/config.yaml
docker rm -f dtk-v4 # the container from the run above holds the name
docker compose -p dtk-v4 up -d
main은 이제 v5이고 latest는 최신 v5 릴리스입니다 — 릴리스가 나올 때 움직이며, main으로의 푸시에서는 결코 움직이지 않습니다 — 그러므로 v4에 머물려면 태그를 고정하세요. V4.1.2는 마지막 v4 릴리스입니다; 브랜치는 그 후 몇 개의 PR을 머지했고(Bilibili 다운로드, 쿠키 핫 리로드), 그 코드는 커밋 태그 5be4838 로 게시됩니다.
v4용 안내 설치 프로그램은 없습니다 — 아래 Quick start의 스크립트는 v5를 설치합니다. 위에 있는 것이 v4가 받는 전부입니다: 브랜치는 여전히 PR을 받지만, 그 위에 새로 만들어지는 것은 없으며, 새 설치는 v5로 시작해야 합니다.
함께 만들어 가기
제 오픈 소스 프로젝트를 둘러싼 몇 개의 그룹 채팅이 있습니다. 이 프로젝트에 참여하고 싶거나, 그냥 이야기를 나누고 싶다면, WeChat에서 Evil0ctal 로 저를 추가하고 github 交流 라는 메모를 남기면 제가 추가하겠습니다.
그룹은 서로에게 배우기 위한 곳입니다. 광고도 불법적인 것도 없습니다 — 친구를 사귀고 작업에 대해 이야기하기 위한 곳입니다.
📦 가져올 수 있는 것
기능
Douyin
TikTok
Bilibili
단일 게시물(비디오 또는 이미지 앨범)
✅
✅
✅
작성자 프로필
✅
✅
✅
작성자의 게시물
✅
✅
✅
작성자가 좋아요한 게시물
✅
✅
❌
믹스 / 플레이리스트 / 시즌, 그리고 작성자의 그것들 목록
✅
✅
✅
댓글
✅
✅
✅
댓글 답글
✅
✅
✅
공개 폴더와 그 안의 내용
❌
✅
✅
여러 개로 업로드된 비디오의 파트
—
—
✅
사이트의 인기 보드: 핫, 주간, 역대 픽, 톱 100
❌
❌
✅
팔로워
❌
✅
❌
팔로잉
❌
✅
❌
게시물 옆에 추천되는 게시물
✅
✅
✅
사운드, 그리고 그것을 사용하는 게시물
✅
✅
—
해시태그
✅
✅
—
해시태그 아래의 게시물
❌
✅
—
키워드 검색: 게시물과 계정
❌
✅
✅
라이브 룸: 방송 중인지 여부, 그리고 풀 URL
✅
✅
✅
방송 자체의 id로 라이브 룸 찾기, 그리고 Douyin 앱 공유 링크
✅
✅
—
여러 라이브 룸이 방송 중인지 한 번의 호출로
✅
✅
❌
라이브 룸의 시청자 랭킹
✅
❌
❌
트렌딩 보드
✅
❌
✅
Douyin은 팔로워 및 팔로잉 목록을 로그인한 세션에만 제공하므로, 그 두 엔드포인트는 아예 등록되지 않습니다: 항상 빈 페이지를 반환하는 엔드포인트는 가치가 없습니다. 검색과 해시태그 아래의 게시물도 같은 이야기입니다: Douyin은 게스트에게 둘 다 거부하며, 로그인한 답변은 아직 측정된 적이 없으므로, 그곳에서는 어느 것도 제공되지 않습니다.
TikTok에서 검색은 게스트에게 얇은 한 페이지를 돌려주므로, 페이지를 넘기려면 임포트한 로그인이 필요합니다.
직접 로그인한 쿠키를 임포트하면 나머지가 볼 수 있는 것도 넓어집니다.
Bilibili에서는 이것이 댓글에 가장 중요합니다: 게스트에게는 가장 뜨거운 세 개만 보이고 그 이상은 없으므로, 임포트한 로그인이 그것을 전체 스레드로 바꿔 줍니다. Douyin에서는 작성자가 좋아요한 게시물을 좌우합니다: 게스트에게는 공개든 아니든 아무것도 보이지 않으므로, 그 목록에는 풀에 로그인한 아이덴티티가 필요합니다. 임포트한 로그인은 본인 책임하에 사용하세요: 플랫폼이 그것으로 데이터를 읽는 계정을 밴하는 일은 드물지만, 밴을 배제할 수는 없습니다( 임포트 전에 알아야 할 것 ).
대시는 빈틈이 아닙니다: Douyin이나 TikTok 게시물은 결코 비디오가 하나를 넘지 않으므로 나열할 파트가 없고, Bilibili 라이브 룸은 방송마다 id가 아니라 영구적인 번호 하나를 가집니다.
미디어 다운로드, 콘텐츠 아카이브, 카운터 스냅샷, 컬렉션, 워치리스트는 기본 내장되어 있으며, 어느 것도 다른 서비스를 필요로 하지 않습니다.
🤖 AI 에이전트가 사용하게 하기: MCP
Claude Code, Claude Desktop, Codex CLI, Cherry Studio 또는 다른 MCP 클라이언트를 당신의 인스턴스에서 /mcp 로 향하게 하면, 에이전트가 게시물, 작성자, 댓글을 읽고, 게시물의 미디어를 저장하고, 그것을 전사할 수 있습니다. REST API와 같은 서비스 계층, 아이덴티티 풀, 스케줄러를 거치며, API 키의 스코프가 할 수 있는 일을 제한합니다.
claude mcp add --transport http dtk http://127.0.0.1:8000/mcp/ \
--header " Authorization: Bearer dtk_YOUR_API_KEY "
도구
하는 일
parse_url
링크가 가리키는 무엇이든 가져옴 — 게시물, 작성자, 단축 링크, 붙여넣은 공유 텍스트
get_video · get_user
id로 게시물 하나, 또는 작성자 프로필 하나
list_user_posts · list_comments
작성자의 게시물 또는 게시물의 댓글을 한 페이지씩
get_content_history
로컬 데이터베이스에서 게시물 또는 작성자의 기록된 카운터 이력
pool_status
아이덴티티 풀과 엔드포인트 헬스, 에이전트가 "나중에 시도"와 "고장"을 구분할 수 있게
download_media
게시물의 미디어를 이 인스턴스에 저장
transcribe_video
저장된 비디오를 텍스트로 변환
get_task_result
호출 내에 끝나지 않은 결과를 수집
도구는 열 개이며, 의도적으로 적습니다: 도구가 하나 늘어날 때마다 에이전트가 올바른 것을 고르는 능력이 나빠지므로, 새 기능은 기존 도구의 인자로 들어옵니다. 각 클라이언트 설정과 모든 도구가 반환하는 것: MCP와 AI 에이전트 . 콘솔은 같은 가이드를 /mcp-guide 에서 보여 줍니다.
🎙 음성-텍스트 변환, 당신의 머신에서
다운로드한 비디오는 저장된 곳에서 전사될 수 있습니다. FunASR 모델 — 음성을 위한 Paraformer, 누군가 말하는 곳을 찾는 FSMN-VAD, 구두점을 위한 CT-Transformer — 은 외부로 나가는 경로가 없는 네트워크의 사이드카에서 실행되므로, 오디오는 호스트를 떠나지 않고 어떤 API도 호출되지 않습니다.
어디서: 콘솔의 Transcriptions 페이지, 완료된 모든 다운로드의 Transcribe video 버튼, Library(저장된 게시물 하나, 또는 한 번에 전체 선택),
POST /api/v1/transcriptions , 또는 transcribe_video MCP 도구
무엇을 얻나: 비디오당 하나의 전체 텍스트, …
Other tools that do the same work
CLI 및 MCP 서버로, 에이전트에게 소셜 및 비디오 콘텐츠에 대한 검색 및 읽기 접근 권한을 제공합니다
에이전트를 수천 개의 Apify 스크래퍼에 연결하여 웹 데이터를 추출하세요.
No comments yet.
to comment.