Skip to main content

TikTok LIVE stream recorder for Python. Capture any TikTok LIVE stream to MP4 with one command. HLS + FLV support, scheduled records, ffmpeg under the hood. 2026 edition.

Project description

tiktok-live-recorder

Record any TikTok LIVE stream to MP4 in one command.

CLI + Python SDK. HLS + FLV input. Uses ffmpeg under the hood. Schedule, monitor, auto-archive. 2026 edition.

pypi downloads python license


Install

pip install tiktok-live-recorder

ffmpeg must be on PATH:

  • Windows: download from https://www.gyan.dev/ffmpeg/builds/ and add bin to PATH.
  • macOS: brew install ffmpeg
  • Linux: sudo apt install ffmpeg (Debian/Ubuntu) or sudo dnf install ffmpeg (Fedora).

CLI

tiktok-live-recorder streamer_username

No key. No config. Just run it.

tiktok-live-recorder <username> [options]

Options:
  -o, --out <file>         Output file (default: <username>-<timestamp>.mp4)
  -q, --quality <q>        origin | FULL_HD1 | HD1 | SD1 | SD2  (default: origin)
  -c, --container <ext>    mp4 | flv | ts | mkv  (default: mp4)
      --max <seconds>      Stop after N seconds
  -v, --verbose            Print ffmpeg output

Examples:

# Record at best quality
tiktok-live-recorder streamer

# Cap at 2 hours, save to a named file
tiktok-live-recorder streamer --out 2026-06-07.mp4 --max 7200

# Save as FLV (no remux)
tiktok-live-recorder streamer -q origin -c flv

# Run as a module
python -m tiktok_live_recorder streamer

The CLI exits with code 2 when the user is offline so you can chain it in a watcher script:

while ! tiktok-live-recorder streamer; do sleep 30; done

SDK

Quick start

from tiktok_live_recorder import TikTokLiveRecorder

rec = TikTokLiveRecorder("streamer")
out_file, duration = rec.record(quality="origin")
print(f"Wrote {out_file} ({duration}s)")

Constructor

TikTokLiveRecorder(unique_id, *, endpoint=STREAM_URL_ENDPOINT, api_key="")
Argument Type Default Description
unique_id str - TikTok username (with or without @).
endpoint str https://api.tik.tools/webcast/stream_url Override the URL resolver.
api_key str "" Optional API key for higher-quality endpoints.

rec.resolve() -> StreamSources

Return the available HLS / FLV URLs for the user without starting a recording.

sources = rec.resolve()
if not sources.live:
    print("offline")
else:
    print("HLS origin:", sources.hls.get("origin"))

rec.record(...) -> tuple[str, int]

Capture to disk. Returns (out_file, duration_sec). Resolves when the stream goes offline, max_duration_sec hits, or the user hits Ctrl+C.

Argument Type Default Description
out_file `str None` <uniqueId>-<timestamp>.mp4
quality str "origin" Preferred quality. Falls back to next available.
container str "mp4" mp4 / flv / ts / mkv.
ffmpeg_path str "ffmpeg" Override the ffmpeg binary location.
max_duration_sec `int None` -
verbose bool False Print ffmpeg stderr.
on_segment_start Callable[[str], None] - Callback when a new segment file starts.
on_segment_end Callable[[str], None] - Callback when a segment file closes.

Errors

from tiktok_live_recorder import (
    TikTokLiveRecorder,
    StreamOfflineError,
    FfmpegMissingError,
)

rec = TikTokLiveRecorder("streamer")
try:
    rec.record()
except StreamOfflineError:
    print("not live")
except FfmpegMissingError:
    print("install ffmpeg")

Recipes

Watch + record (poll every 30s)

import time
from tiktok_live_recorder import TikTokLiveRecorder, StreamOfflineError

rec = TikTokLiveRecorder("streamer")

while True:
    try:
        out_file, duration = rec.record()
        print(f"captured {out_file} ({duration}s)")
    except StreamOfflineError:
        print("offline, retry in 30s")
    time.sleep(30)

Batch record multiple creators concurrently

import concurrent.futures
from tiktok_live_recorder import TikTokLiveRecorder, StreamOfflineError

USERNAMES = ["a", "b", "c"]

def record_one(u: str) -> str:
    try:
        out_file, _ = TikTokLiveRecorder(u).record(out_file=f"{u}.mp4")
        return f"{u} -> {out_file}"
    except StreamOfflineError:
        return f"{u} offline"

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as ex:
    for r in ex.map(record_one, USERNAMES):
        print(r)

Time-capped clip

from tiktok_live_recorder import TikTokLiveRecorder

rec = TikTokLiveRecorder("streamer")
out_file, _ = rec.record(max_duration_sec=60, out_file="clip.mp4")

Custom ffmpeg pipeline (split into 10-min segments)

import subprocess
from tiktok_live_recorder import TikTokLiveRecorder

sources = TikTokLiveRecorder("streamer").resolve()
input_url = sources.hls.get("origin")
if not input_url:
    raise SystemExit("no hls available")

subprocess.run([
    "ffmpeg", "-i", input_url,
    "-c", "copy",
    "-f", "segment",
    "-segment_time", "600",
    "-reset_timestamps", "1",
    "streamer-%03d.mp4",
])

More ready-to-run recipes in examples/.


How it works

  1. The recorder asks https://api.tik.tools/webcast/stream_url?uniqueId=X for the user's current HLS / FLV URLs.
  2. The server checks live status + returns the URLs as JSON.
  3. The recorder spawns local ffmpeg, passes the URL as input, copies the bytes to disk. No re-encoding.

All bandwidth flows directly from TikTok's CDN to your disk - none of it touches our servers. We only handle the lightweight URL resolution.


Compatibility

  • Python >= 3.9.
  • Works on Windows, macOS, Linux, Docker.
  • Requires ffmpeg on PATH.

License

MIT

This is an independent third-party project. Not affiliated with, endorsed by, or in any way officially connected to TikTok or ByteDance Ltd. "TikTok" is a trademark of ByteDance Ltd; the name appears here for search discoverability.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tiktok_live_recorder-1.0.2.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tiktok_live_recorder-1.0.2-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file tiktok_live_recorder-1.0.2.tar.gz.

File metadata

  • Download URL: tiktok_live_recorder-1.0.2.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for tiktok_live_recorder-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a66d7d099022e5fe23e40951100278ebbbc923bac20a5d14edc138139c61d7f6
MD5 ac902ce9da8c41eed3c03c9977b9723e
BLAKE2b-256 c3524b952f53a4ee8a9adc9fa91b9a33f2434787ca2c3d77987916a4c3b1e451

See more details on using hashes here.

File details

Details for the file tiktok_live_recorder-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for tiktok_live_recorder-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f9a5bb1e648708d5e67419637301c2a3fb629db31b6c7fc3edb9b95072bbc56d
MD5 25b21787942ba4a418d82a0f44e99138
BLAKE2b-256 fb00b6479a377ba92a590b94fdd6770e65c98162ead5b3f5a1f62e985ca4814d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page