DouyinLiveRecorder: a loop-and-watch recorder for 40+ live platforms
可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcasting、winktv、百度、微博、酷狗、17Live、Twitch、Acfun、CHZZK、shopee等40+平台直播录制
At a glance
- What is it?
- DouyinLiveRecorder is a Python and FFmpeg tool that monitors a list of live room URLs and records whatever goes live. It is built for people who need unattended capture across Douyin, TikTok, YouTube and dozens of smaller platforms, and its main cost is that you maintain the URL list by hand.
- Who is it for?
- Adopt DouyinLiveRecorder if you need unattended capture from several live platforms at once and you are willing to run a Python process or the Docker image continuously. Do not adopt it if you need per-stream metadata, an API, or a guarantee that any single platform keeps working: the README lists roughly fifty supported sites and no compatibility promises.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What DouyinLiveRecorder actually does, and who it is for
The project describes itself as a loop-based live recording tool for multiple platforms, built on FFmpeg. The problem it addresses is narrow and practical: a live stream is only available while it is happening, and if you want a copy of it you have to be watching at the moment it starts. DouyinLiveRecorder takes a list of room URLs and keeps checking them, so you do not have to.
The intended user is someone running a long-lived process on a desktop or a server, not someone clicking a record button. The README addresses novice users first and points them at the packaged zip in Releases, which contains a prebuilt executable. A second path exists for people who want to run the source. Both paths assume you will leave the program running for hours.
The supported list is the headline feature. The README checks off Douyin, TikTok, Kuaishou, Huya, Douyu, YY, Bilibili, Xiaohongshu, SOOP (formerly AfreecaTV), NetEase CC, PandaTV, TwitCasting, Baidu Live, Weibo Live, Kugou, Twitch, AcFun, CHZZK, 17Live, Shopee, YouTube, Taobao, JD, Migu, Picarto and many more. It is a long list of Chinese and Korean platforms plus the obvious international ones. Breadth here is a maintenance liability as much as a feature: each platform is a separate extraction path, and the repository layout shows separate modules for spidering, stream resolution and signing.
How the loop, the spiders and the FFmpeg call fit together
The repository layout is the clearest description of the architecture. Inside the douyinliverecorder package there is spider.py for "get live data", stream.py for "get live stream address", room.py for room info, ab_sign.py for generating a Douyin token, utils.py and logger.py for support, and a javascript directory holding some decrypt code. main.py at the top level drives the loop. msg_push.py sends live status updates, which is how the tool tells you a stream started or ended.
So the data flow is: read the URL list, resolve each URL to a room, ask the platform whether that room is live, and if it is, resolve a stream address and hand it to FFmpeg. FFmpeg does the actual recording. The repository ships ffmpeg.exe for Windows, and ffmpeg_install.py exists to fetch or install FFmpeg where it is missing. The Dockerfile installs ffmpeg from apt.
Two details show how much of the work is platform-specific. ab_sign.py and the javascript directory exist because Douyin stream URLs require a signed token that is generated by JavaScript. initializer.py checks for and installs Node.js, which is what runs that JavaScript. Nothing in the README suggests a plugin interface for adding platforms; the support list grows by adding code to these modules.
Installing DouyinLiveRecorder and recording your first room
The README gives two install paths. The packaged zip in Releases is the fast one: extract it, and you are done. The source path starts with a clone, and the README's own snippet stops after the cd step, so the dependency install is best taken from requirements.txt, which lists requests, loguru, pycryptodome, distro, tqdm, httpx with HTTP/2 extras, and PyExecJS. pyproject.toml requires Python 3.10 or newer.
git clone https://github.com/ihmily/DouyinLiveRecorder.git
cd DouyinLiveRecorder
pip install -r requirements.txt
python main.pyBefore running main.py, the README says to put room URLs in config/URL_config.ini, one per line. That file is the entire input surface. If you want to change recording behaviour, config.ini holds those settings, and the README recommends switching the recording format to ts. Recorded files land in a downloads folder next to the program.
The Docker path avoids installing Python, Node.js and FFmpeg yourself. The compose file mounts config, logs, backup_config and downloads as volumes, which is what you want, because otherwise a container rebuild would take your URL list with it.
services:
app:
image: ihmily/douyin-live-recorder:latest
tty: true
stdin_open: true
volumes:
- ./config:/app/config
- ./logs:/app/logs
- ./backup_config:/app/backup_config
- ./downloads:/app/downloads
restart: alwaysFor overseas platforms such as TikTok and AfreecaTV, the README says to enable the proxy option in the config file and add a proxy_addr value in the form 127.0.0.1:7890, which is the README's own example address rather than a default.
The URL list is the interface, and that is the weak point
There is no API, no database and no queue. The state of what you are recording lives in a text file, and every change is a manual edit. That design is why the tool is easy to start and awkward to operate at scale.
The README does document two useful conventions for that file. Prefixing a URL with # stops both monitoring and recording for that room, without deleting the line, and the README says doing so lets the current recording finish and save normally. A quality setting can be prepended to a URL, separated by a comma, with an example of 超清 before a Douyin URL. Default quality is 原画.
Where the README is thin is failure behaviour. It does not document what happens when a platform changes its page structure, when a room URL redirects to a different identifier, or how a partially recorded file is left after a crash. The README warns about one operational failure mode explicitly: if you run the loop for a long time, set a longer loop interval, because frequent requests can get your IP banned by the platform. That is a real constraint, not a hypothetical, and it means the tool trades capture latency for account and IP safety. The README does not document rollback or a retry policy.
Where DouyinLiveRecorder is the wrong tool
If you need one stream recorded once, the loop architecture is overhead. You would be better served by pointing FFmpeg at the stream URL yourself, or by a browser extension. DouyinLiveRecorder earns its place when you are watching many rooms over days.
If you need structured output alongside the video, this is not it. The README describes recording and message push for live status. It does not describe a metadata sidecar, a chat or danmaku capture, or a searchable index of what was recorded. A project like DanmakuRender, which appears in related searches around this project, addresses a different part of the problem: rendering chat and danmaku onto video. DouyinLiveRecorder does not.
If you need a stable, documented, versioned interface to build on, the MIT licence gives you the code, but the README gives no API contract. Platform support is a code path, not a plugin, so adding a site means editing the package.
Finally, if you cannot run a long-lived process, or cannot accept that overseas platforms need a proxy, the tool will not work for you at all. The README is explicit that TikTok and AfreecaTV recording requires enabling the proxy setting and supplying a proxy_addr.
Alternatives and how their approach differs
The closest comparison in the related searches is Bilibili-focused recorders such as BililiveRecorder and its Go counterpart. The difference is scope. A Bilibili recorder is built around one platform's API and can therefore handle that platform's specifics properly: stream variants, quality selection, and the platform's own chat stream. DouyinLiveRecorder spreads the same effort across roughly fifty platforms, which is why its per-platform handling is thinner and why a single platform's change can break one branch without touching the others.
StreamCap is another name that appears in related searches. It is a separate project, and nothing here describes its internals, so the honest statement is that both target live stream capture and you should compare their platform lists and output formats directly rather than assume one is a superset.
The practical distinction is operational. A single-platform recorder can be trusted to handle edge cases on that platform. A multi-platform recorder like DouyinLiveRecorder is chosen when you need coverage across Douyin, TikTok, YouTube and smaller sites in one process, and you accept that each platform branch gets less attention.
Maintenance, licence and what the release history shows
The repository is not archived. The last push was on 2026-04-01, which is roughly five and a half months before today, so the project is not in a state I would describe as actively developed right now. The most recent release, v4.0.7, is dated 2025-10-24, with v4.0.6 on 2025-09-01 and v4.0.3 on 2025-06-06. That cadence suggests maintenance releases rather than rapid feature work.
Upgrade cost is mostly invisible. There is no database schema and no migration step, so upgrading means replacing the code or pulling a new image. What does carry over is your config directory, which the Docker compose file mounts from the host. The repository also contains a backup_config directory that is mounted in the same compose file, which suggests the program itself writes configuration backups, though the README does not explain when or why.
The licence is MIT, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are included. That is a permissive licence, not legal advice, and if you plan to redistribute the packaged build you should read the LICENSE file in the repository rather than this summary. One practical licensing note: the repository bundles ffmpeg.exe for Windows, and FFmpeg's own licensing depends on how that particular build was compiled.
Editorial conclusion
Adopt DouyinLiveRecorder if you need unattended capture from several live platforms at once and you are willing to run a Python process or the Docker image continuously. Do not adopt it if you need per-stream metadata, an API, or a guarantee that any single platform keeps working: the README lists roughly fifty supported sites and no compatibility promises. Before committing, verify that ffmpeg is on PATH or that ffmpeg_install.py succeeds, that the URLs you care about are accepted in config/URL_config.ini, and that the config.ini loop interval you choose does not get your IP rate limited.
Frequently asked questions
How do I install DouyinLiveRecorder?
The README offers two paths. Download the latest zip from Releases for a packaged build, or clone the repository, install the dependencies from requirements.txt and run main.py. The Docker image ihmily/douyin-live-recorder:latest is also published.
How do I add a live room to DouyinLiveRecorder?
Add the room URL to config/URL_config.ini, one URL per line. Prefixing a line with # stops monitoring and recording for that room without removing the link, and a quality value can be prepended before the URL separated by a comma.
Does DouyinLiveRecorder need a proxy for TikTok or AfreecaTV?
Yes. The README says that to record overseas platforms such as TikTok and AfreecaTV you must enable the proxy option in the configuration file and add a proxy_addr value, with 127.0.0.1:7890 given as an example address.
How do I stop DouyinLiveRecorder from recording?
On Windows you can run the StopRecording.vbs script, or use Ctrl+C in the recording interface. To stop a single room, add # in front of its address in URL_config.ini, which the README says stops that room and saves the recording normally.
What licence does DouyinLiveRecorder use?
The project is MIT licensed according to both pyproject.toml and the repository's LICENSE file. That permits commercial use and modification as long as the copyright and permission notices are kept.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ihmily-douyinliverecorder)