A tool to record multiple Chaturbate streams. Supports macOS, Windows, Linux, and Docker. Favicon from Twemoji.
Β
Go to the π¦ Releases page and download the appropriate binary. (e.g., x64_windows_chatubrate-dvr.exe
)
Β
# Windows
$ x64_windows_chatubrate-dvr.exe
# macOS / Linux
$ ./x64_linux_chatubrate-dvr
Then visit http://localhost:8080
in your browser.
Β
# Windows
$ x64_windows_chatubrate-dvr.exe -u CHANNEL_USERNAME
# macOS / Linux
$ ./x64_linux_chatubrate-dvr -u CHANNEL_USERNAME
This starts recording immediately. The Web UI will be disabled.
Β
Pre-built image yamiodymel/chaturbate-dvr
from Docker Hub:
# Run the container and save videos to ./videos
$ docker run -d \
--name my-dvr \
-p 8080:8080 \
-v "./videos:/usr/src/app/videos" \
-v "./conf:/usr/src/app/conf" \
yamiodymel/chaturbate-dvr
...Or build your own image using the Dockerfile in this repository.
# Build the image
$ docker build -t chaturbate-dvr .
# Run the container and save videos to ./videos
$ docker run -d \
--name my-dvr \
-p 8080:8080 \
-v "./videos:/usr/src/app/videos" \
-v "./conf:/usr/src/app/conf" \
chaturbate-dvr
...Or use docker-compose.yml
:
$ docker-compose up
Then visit http://localhost:8080
in your browser.
Β
Available options:
--username value, -u value The username of the channel to record
--admin-username value Username for web authentication (optional)
--admin-password value Password for web authentication (optional)
--framerate value Desired framerate (FPS) (default: 30)
--resolution value Desired resolution (e.g., 1080 for 1080p) (default: 1080)
--pattern value Template for naming recorded videos (default: "videos/{{.Username}}_{{.Year}}-{{.Month}}-{{.Day}}_{{.Hour}}-{{.Minute}}-{{.Second}}{{if .Sequence}}_{{.Sequence}}{{end}}")
--max-duration value Split video into segments every N minutes ('0' to disable) (default: 0)
--max-filesize value Split video into segments every N MB ('0' to disable) (default: 0)
--port value, -p value Port for the web interface and API (default: "8080")
--interval value Check if the channel is online every N minutes (default: 1)
--cookies value Cookies to use in the request (format: key=value; key2=value2)
--user-agent value Custom User-Agent for the request
--domain value Chaturbate domain to use (default: "https://chaturbate.global/")
--help, -h show help
--version, -v print the version
Examples:
# Record at 720p / 60fps
$ ./chatubrate-dvr -u yamiodymel -resolution 720 -framerate 60
# Split every 30 minutes
$ ./chatubrate-dvr -u yamiodymel -max-duration 30
# Split at 1024 MB
$ ./chatubrate-dvr -u yamiodymel -max-filesize 1024
# Custom filename format
$ ./chatubrate-dvr -u yamiodymel \
-pattern "video/{{.Username}}/{{.Year}}-{{.Month}}-{{.Day}}_{{.Hour}}-{{.Minute}}-{{.Second}}_{{.Sequence}}"
Note: In Web UI mode, these flags serve as default values for new channels.
Β
You can set Cookies and User-Agent via the Web UI or command-line arguments.
Note: Use semicolons to separate multiple cookies, e.g., key1=value1; key2=value2
.
Β
-
Open Chaturbate in your browser and complete the Cloudflare check.
(Keep refresh with F5 if the check doesn't appear)
-
DevTools (F12) β Application β Cookies β
https://chaturbate.com
β Copy thecf_clearance
value
-
User-Agent can be found using WhatIsMyBrowser, now run with
-cookies
and-user-agent
:$ ./chatubrate-dvr -u yamiodymel \ -cookies "cf_clearance=PASTE_YOUR_CF_CLEARANCE_HERE" \ -user-agent "PASTE_YOUR_USER_AGENT_HERE"
Example:
$ ./chatubrate-dvr -u yamiodymel \ -cookies "cf_clearance=i975JyJSMZUuEj2kIqfaClPB2dLomx3.iYo6RO1IIRg-1746019135-1.2.1.1-2CX..." \ -user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
Β
-
Login Chaturbate in your browser.
-
DevTools (F12) β Application β Cookies β
https://chaturbate.com
β Copy thesessionid
value -
Run with
-cookies
:$ ./chatubrate-dvr -u yamiodymel -cookies "sessionid=PASTE_YOUR_SESSIONID_HERE"
Β
The format is based on Go Template Syntax, available variables are:
{{.Username}}
, {{.Year}}
, {{.Month}}
, {{.Day}}
, {{.Hour}}
, {{.Minute}}
, {{.Second}}
, {{.Sequence}}
Β
Default it hides the sequence if it's zero.
Pattern: {{.Username}}_{{.Year}}-{{.Month}}-{{.Day}}_{{.Hour}}-{{.Minute}}-{{.Second}}{{if .Sequence}}_{{.Sequence}}{{end}}
Output: yamiodymel_2024-01-02_13-45-00.ts # Sequence won't be shown if it's zero.
Output: yamiodymel_2024-01-02_13-45-00_1.ts
π or... The sequence can be shown even if it's zero.
Pattern: {{.Username}}_{{.Year}}-{{.Month}}-{{.Day}}_{{.Hour}}-{{.Minute}}-{{.Second}}_{{.Sequence}}
Output: yamiodymel_2024-01-02_13-45-00_0.ts
Output: yamiodymel_2024-01-02_13-45-00_1.ts
π or... Folder per each channel.
Pattern: video/{{.Username}}/{{.Year}}-{{.Month}}-{{.Day}}_{{.Hour}}-{{.Minute}}-{{.Second}}_{{.Sequence}}
Output: video/yamiodymel/2024-01-02_13-45-00_0.ts
Note: Files are saved in .ts
format, and this is not configurable.
Β
Q: The program closes immediately on Windows.
Open it via Command Prompt, the error message should appear. If needed, create an issue.
Β
Q: Error listen tcp :8080: bind: An attempt was... by its access permissions
The port
8080
is in use. Try another port with-p 8123
, then visit http://localhost:8123.If that fails, run Command Prompt as Administrator and execute:
$ net stop winnat $ net start winnat
Β
Q: Error A connection attempt failed... host has failed to respond
Likely a network issue (e.g., VPN, firewall, or blocked by Chaturbate). This cannot be fixed by the program.
Β
Q: Error Channel was blocked by Cloudflare
You've been temporarily blocked. See the Cookies & User-Agent section to bypass.
Β
Q: Is Proxy or SOCKS5 supported?
Yes. You can launch the program using the
HTTPS_PROXY
environment variable:$ HTTPS_PROXY="socks5://127.0.0.1:9050" ./chaturbate-dvr -u CHANNEL_USERNAME