Yami Odymel cc91274722
Merge pull request #143 from lil-bandit/formatted-json-config
Make the config JSON more readable
2025-07-30 08:06:42 +08:00
2025-05-06 05:27:23 +08:00
2025-07-28 00:42:28 +02:00
2025-05-06 05:27:23 +08:00
2025-07-28 21:33:38 +02:00
2025-07-28 21:19:28 +02:00
2025-05-02 23:52:58 +08:00
2025-05-03 00:16:29 +08:00
2025-05-02 23:52:58 +08:00
2025-05-02 23:52:58 +08:00
2025-01-14 08:51:47 +08:00
2025-05-02 23:54:32 +08:00
2025-06-25 20:41:45 +08:00

Chaturbate DVR

A tool to record multiple Chaturbate streams. Supports macOS, Windows, Linux, and Docker. Favicon from Twemoji.

Image

Image

 

Getting Started

Go to the 📦 Releases page and download the appropriate binary. (e.g., x64_windows_chaturbate-dvr.exe)

 

🌐 Launching the Web UI

# Windows
$ x64_windows_chaturbate-dvr.exe

# macOS / Linux
$ ./x64_linux_chaturbate-dvr

Then visit http://localhost:8080 in your browser.

 

💻 Using as a CLI Tool

# Windows
$ x64_windows_chaturbate-dvr.exe -u CHANNEL_USERNAME

# macOS / Linux
$ ./x64_linux_chaturbate-dvr -u CHANNEL_USERNAME

This starts recording immediately. The Web UI will be disabled.

 

🐳 Running with Docker

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.

 

🧾 Command-Line Options

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
$ ./chaturbate-dvr -u yamiodymel -resolution 720 -framerate 60

# Split every 30 minutes
$ ./chaturbate-dvr -u yamiodymel -max-duration 30

# Split at 1024 MB
$ ./chaturbate-dvr -u yamiodymel -max-filesize 1024

# Custom filename format
$ ./chaturbate-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.

 

🍪 Cookies & User-Agent

You can set Cookies and User-Agent via the Web UI or command-line arguments.

localhost_8080_ (4)

Note: Use semicolons to separate multiple cookies, e.g., key1=value1; key2=value2.

 

☁️ Bypass Cloudflare

  1. Open Chaturbate in your browser and complete the Cloudflare check.

    (Keep refresh with F5 if the check doesn't appear)

  2. DevTools (F12)ApplicationCookieshttps://chaturbate.com → Copy the cf_clearance value

sshot-2025-04-30-146

  1. User-Agent can be found using WhatIsMyBrowser, now run with -cookies and -user-agent:

    $ ./chaturbate-dvr -u yamiodymel \
        -cookies "cf_clearance=PASTE_YOUR_CF_CLEARANCE_HERE" \
        -user-agent "PASTE_YOUR_USER_AGENT_HERE"
    

    Example:

    $ ./chaturbate-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)..."
    

 

🕵️ Record Private Shows

  1. Login Chaturbate in your browser.

  2. DevTools (F12)ApplicationCookieshttps://chaturbate.com → Copy the sessionid value

  3. Run with -cookies:

    $ ./chaturbate-dvr -u yamiodymel -cookies "sessionid=PASTE_YOUR_SESSIONID_HERE"
    

 

📄 Filename Pattern

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.

 

🤔 Frequently Asked Questions

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
Description
No description provided
Readme MIT 598 MiB
Languages
Go 64.6%
HTML 35%
Dockerfile 0.4%