|
4 | 4 | [](https://www.docker.com/) |
5 | 5 | [](https://github.com/raccommode/P-StreamRec) |
6 | 6 |
|
7 | | -**Automatic recording of Chaturbate and m3u8 streams with a modern web interface** |
| 7 | +**Automatic Chaturbate & m3u8 stream recorder with a modern web interface.** |
8 | 8 |
|
9 | | - |
| 9 | +## Features |
10 | 10 |
|
11 | | -## ✨ Features |
| 11 | +- **24/7 automatic recording** — monitors models and records when they go live |
| 12 | +- **Auto MP4 conversion** — converts TS to compressed MP4 in background (50-70% smaller) |
| 13 | +- **Discover** — browse live Chaturbate models with gender, tag, and search filters |
| 14 | +- **Following** — sync and view your followed models from your Chaturbate account |
| 15 | +- **Recordings** — manage all recordings with built-in video player |
| 16 | +- **Live Watch** — watch streams directly in the browser with HLS player |
| 17 | +- **Chaturbate auth** — login for better stream quality and followed models sync |
| 18 | +- **FlareSolverr** — automatic Cloudflare bypass via dedicated container |
| 19 | +- **Settings** — manage account, FlareSolverr status, tag blacklist |
| 20 | +- **Password protection** — optional login to secure the interface |
| 21 | +- **GitOps updates** — update the app directly from the UI |
| 22 | +- **Docker ready** — one command to get started |
12 | 23 |
|
13 | | -- 🎥 **24/7 automatic recording** - Monitors and records when users go live |
14 | | -- 🎬 **Auto MP4 conversion** - Automatically converts recordings to compressed MP4 after stream ends |
15 | | -- 🌐 **Web interface** - Manage recordings and watch replays in browser |
16 | | -- 📦 **Docker ready** - One command to get started |
17 | | -- 🔄 **GitOps updates** - Update directly from the interface |
18 | | -- 🎯 **Chaturbate + m3u8 support** - Works with any HLS stream |
19 | | -- 💾 **Smart storage** - Unique ID per recording, automatic compression |
20 | | -- 📊 **Size display** - Shows file sizes in MB or GB (>1000 MB) |
| 24 | +## Screenshots |
21 | 25 |
|
22 | | -## ⚙️ Configuration (Environment Variables) |
| 26 | +| Discover | Following | Recordings | |
| 27 | +|----------|-----------|------------| |
| 28 | +|  |  |  | |
23 | 29 |
|
24 | | -| Variable | Default | Description | |
25 | | -|----------|---------|-------------| |
26 | | -| `OUTPUT_DIR` | `/data` | Recordings folder (Docker volume) | |
27 | | -| `PORT` | `8080` | Web interface port | |
28 | | -| `FFMPEG_PATH` | `ffmpeg` | Path to ffmpeg | |
29 | | -| `HLS_TIME` | `4` | HLS segment duration (seconds) | |
30 | | -| `HLS_LIST_SIZE` | `6` | Number of segments in playlist | |
31 | | -| `CB_RESOLVER_ENABLED` | `true` | **Enable Chaturbate support** | |
32 | | -| `CB_COOKIE` | - | Chaturbate session cookie (optional) | |
33 | | -| `PASSWORD` | - | **Password to protect access** (optional) | |
34 | | -| `AUTO_RECORD_USERS` | - | Comma-separated list of users to auto-record | |
35 | | -| `TZ` | `UTC` | Timezone (e.g., `America/New_York`) | |
36 | | - |
37 | | -## 🚀 Quick Start |
38 | | - |
39 | | -### Docker Run |
40 | | -```bash |
41 | | -docker run -d \ |
42 | | - --name p-streamrec \ |
43 | | - -p 8080:8080 \ |
44 | | - -v ./data:/data \ |
45 | | - -e CB_RESOLVER_ENABLED=true \ |
46 | | - ghcr.io/raccommode/p-streamrec:latest |
47 | | -``` |
| 30 | +## Quick Start |
| 31 | + |
| 32 | +### Docker Compose (recommended, includes FlareSolverr) |
48 | 33 |
|
49 | | -### Docker Compose |
50 | 34 | ```yaml |
51 | 35 | version: "3.8" |
52 | 36 | services: |
| 37 | + flaresolverr: |
| 38 | + image: ghcr.io/flaresolverr/flaresolverr:latest |
| 39 | + environment: |
| 40 | + - LOG_LEVEL=info |
| 41 | + ports: |
| 42 | + - "8191:8191" |
| 43 | + restart: unless-stopped |
| 44 | + |
53 | 45 | p-streamrec: |
54 | 46 | image: ghcr.io/raccommode/p-streamrec:latest |
| 47 | + depends_on: |
| 48 | + - flaresolverr |
| 49 | + environment: |
| 50 | + - CB_RESOLVER_ENABLED=true |
| 51 | + - FLARESOLVERR_URL=http://flaresolverr:8191 |
55 | 52 | ports: |
56 | 53 | - "8080:8080" |
57 | 54 | volumes: |
58 | 55 | - ./data:/data |
59 | | - environment: |
60 | | - - CB_RESOLVER_ENABLED=true |
61 | 56 | restart: unless-stopped |
62 | 57 | ``` |
63 | 58 |
|
64 | | -**Access:** `http://localhost:8080` |
65 | | - |
66 | | -## 🔐 Password Protection (Optional) |
67 | | - |
68 | | -Pour protéger l'accès à l'interface avec un mot de passe, définissez la variable `PASSWORD`: |
| 59 | +### Docker Run (simple) |
69 | 60 |
|
70 | | -```yaml |
71 | | -environment: |
72 | | - - PASSWORD=votre_mot_de_passe_securise |
| 61 | +```bash |
| 62 | +docker run -d --name p-streamrec \ |
| 63 | + -p 8080:8080 -v ./data:/data \ |
| 64 | + -e CB_RESOLVER_ENABLED=true \ |
| 65 | + ghcr.io/raccommode/p-streamrec:latest |
73 | 66 | ``` |
74 | 67 |
|
75 | | -**Comportement:** |
76 | | -- **Sans PASSWORD**: Accès direct à l'interface (comportement par défaut) |
77 | | -- **Avec PASSWORD**: Redirection vers `/login` pour authentification |
78 | | -- Les sessions sont conservées pendant 30 jours |
79 | | -- Bouton de déconnexion 🚪 disponible dans l'interface |
80 | | - |
81 | | -## 📖 Usage |
| 68 | +**Access:** `http://localhost:8080` |
82 | 69 |
|
83 | | -1. **Add a model**: Click **+** → Enter Chaturbate username or m3u8 URL |
84 | | -2. **Auto-record**: System checks every 2 minutes and records when live |
85 | | -3. **Auto-convert**: When stream ends, system converts TS to MP4 (50-70% smaller) |
86 | | -4. **Watch replays**: Click model card → **Replays** tab (TS or MP4 available) |
87 | | -5. **Update**: Click **GitOps** button in header to update app (Git deployment only) |
| 70 | +## Configuration |
88 | 71 |
|
89 | | -**Recording Format:** |
90 | | -- Original: `/data/records/<username>/YYYYMMDD_HHMMSS_ID.ts` (MPEG-TS) |
| 72 | +| Variable | Default | Description | |
| 73 | +|----------|---------|-------------| |
| 74 | +| `OUTPUT_DIR` | `/data` | Recordings folder | |
| 75 | +| `PORT` | `8080` | Web interface port | |
| 76 | +| `FFMPEG_PATH` | `ffmpeg` | Path to FFmpeg | |
| 77 | +| `CB_RESOLVER_ENABLED` | `true` | Enable Chaturbate support | |
| 78 | +| `CB_REQUEST_DELAY` | `1.0` | Delay between Chaturbate requests (seconds) | |
| 79 | +| `PASSWORD` | — | Password to protect the interface (optional) | |
| 80 | +| `AUTO_RECORD_USERS` | — | Comma-separated usernames to auto-record | |
| 81 | +| `CHATURBATE_USERNAME` | — | Chaturbate login (optional, enables Following + better quality) | |
| 82 | +| `CHATURBATE_PASSWORD` | — | Chaturbate password (optional) | |
| 83 | +| `FLARESOLVERR_URL` | — | FlareSolverr URL (e.g. `http://flaresolverr:8191`) | |
| 84 | +| `TZ` | `UTC` | Timezone (e.g. `America/Toronto`) | |
| 85 | + |
| 86 | +## Usage |
| 87 | + |
| 88 | +1. **Add a model** — click **+**, enter a Chaturbate username or m3u8 URL |
| 89 | +2. **Auto-record** — the system checks every 2 minutes and records when live |
| 90 | +3. **Auto-convert** — when the stream ends, TS is converted to MP4 automatically |
| 91 | +4. **Watch live** — click a model card to open the live player |
| 92 | +5. **Browse replays** — go to the Recordings page to watch or delete recordings |
| 93 | + |
| 94 | +### Recording format |
| 95 | + |
| 96 | +- Original: `/data/records/<username>/YYYYMMDD_HHMMSS_ID.ts` (MPEG-TS, lossless) |
91 | 97 | - Converted: `/data/records/<username>/YYYYMMDD_HHMMSS_ID.mp4` (H.264, auto-generated) |
92 | | -- Each recording has unique ID: `username_YYYYMMDD_HHMMSS_sessionID` |
93 | 98 |
|
94 | | -## 💻 Development |
| 99 | +### Storage estimates |
| 100 | + |
| 101 | +| Format | Size per hour | |
| 102 | +|--------|---------------| |
| 103 | +| TS (original) | ~2–4 GB | |
| 104 | +| MP4 (converted) | ~600 MB–1.2 GB | |
| 105 | + |
| 106 | +## Development |
95 | 107 |
|
96 | 108 | ```bash |
| 109 | +git clone https://github.com/raccommode/P-StreamRec.git |
| 110 | +cd P-StreamRec |
97 | 111 | python -m venv .venv && source .venv/bin/activate |
98 | 112 | pip install -r requirements.txt |
99 | 113 | uvicorn app.main:app --reload |
100 | 114 | ``` |
101 | 115 |
|
102 | | -## 📂 File Management |
103 | | - |
104 | | -**Automatic Conversion:** |
105 | | -- System automatically converts TS → MP4 when stream ends |
106 | | -- MP4 files are 50-70% smaller (H.264 codec, CRF 23) |
107 | | -- Conversion runs in background, no user action needed |
108 | | -- Both TS and MP4 available in Replays tab |
109 | | - |
110 | | -**Play recordings:** |
111 | | -- **Browser**: Use Replays tab (supports TS and MP4) |
112 | | -- **VLC/MPV**: Open files directly from `/data/records/<username>/` |
113 | | -- **MP4**: Better for streaming, smaller file size |
114 | | -- **TS**: Original quality, no re-encoding |
115 | | - |
116 | | -**Manual conversion (if needed):** |
117 | | -```bash |
118 | | -ffmpeg -i input.ts -c:v libx264 -crf 23 -c:a aac output.mp4 |
119 | | -``` |
120 | | - |
121 | | -## ⚠️ Notes |
122 | | - |
123 | | -- **Storage**: TS ~2-4 GB/hour, MP4 ~600 MB-1.2 GB/hour (after conversion) |
124 | | -- **Sizes displayed**: MB for files < 1000 MB, GB for larger files |
125 | | -- **Unique IDs**: Each recording has timestamp + session ID for easy identification |
126 | | -- Use only for public, legally accessible content |
| 116 | +**Stack:** FastAPI, SQLite (aiosqlite), HLS.js, FFmpeg, Docker |
127 | 117 |
|
128 | | -## 📜 License |
| 118 | +## License |
129 | 119 |
|
130 | | -**Non-Commercial Open Source License** - See [LICENSE](LICENSE) |
| 120 | +**Non-Commercial Open Source License** — See [LICENSE](LICENSE) |
131 | 121 |
|
132 | | -✅ Free to use, modify, and distribute |
133 | | -❌ **No commercial use or revenue generation** |
134 | | -🔄 Share modifications under same license |
135 | | -📝 Attribution required |
| 122 | +Free to use, modify, and distribute — **no commercial use** — share modifications under same license — attribution required |
0 commit comments