Download your Tyler Raw videos so you can watch them offline.
Requires an active Tyler Raw membership with access to the member videos.
Tyler Raw serves videos through Cloudflare Stream behind a logged-in web app. This tool uses CloakBrowser/Playwright to:
- Open Tyler Raw with a persistent browser profile
- Log in when needed
- Fetch the
/api/contentmetadata feed - Open each watch page to capture the signed Cloudflare Stream manifest URL
- Download the video with
yt-dlp
Videos are named:
YYYY-MM-DD - Video Title.mp4
Metadata is saved without comments:
metadata.json
- Python 3.11+
- A Tyler Raw account with access to the videos
- A Chromium profile for persistent login, or credentials in
.env
-
Clone the repository and install dependencies:
git clone https://github.com/GraafG/tylerraw-dl.git cd tylerraw-dl pip install -r requirements.txt
-
Copy the example configuration:
Copy-Item .env.example .env -
Fill in
.env.
Download all videos:
python -u download_videos.pyDownload only a limited number:
python -u download_videos.py --limit 5Refresh metadata only:
python -u download_videos.py --metadata-onlyRun without a visible browser window:
python -u download_videos.py --headlessThe tool will:
- Open a browser and use the configured persistent profile
- Log in if needed
- Save video metadata in
metadata.json - Save watch URLs in
video_links.txt - Download videos into
downloads\ - Skip previously downloaded
.mp4files - Resume safely when you run it again
All settings can be configured in .env:
| Variable | Description | Default |
|---|---|---|
TYLERRAW_EMAIL |
Tyler Raw email, only needed if profile is not logged in | empty |
TYLERRAW_PASSWORD |
Tyler Raw password, only needed if profile is not logged in | empty |
TYLERRAW_CHROME_PROFILE |
Persistent browser profile directory | .browser-data |
OUTPUT_DIR |
Folder for downloaded videos | ./downloads |
YTDLP_CONCURRENT_FRAGMENTS |
Parallel HLS/DASH fragment downloads | 16 |
HEADLESS |
Run browser headless (true / false) |
false |
The main speed setting is YTDLP_CONCURRENT_FRAGMENTS.
$env:YTDLP_CONCURRENT_FRAGMENTS='32'
python -u download_videos.pyUse 16 or 32 as a practical range. Higher values may be faster, but can also trigger throttling or more retries.
downloads/
2026-02-25 - Example title.mp4
2026-02-25 - Example title.nfo
2026-02-25 - Example title.jpg
2026-05-24 - Another title.mp4
2026-05-24 - Another title.nfo
2026-05-24 - Another title.jpg
Each video gets:
.mp4— the video.nfo— Kodi/Jellyfin metadata (title, description, date, studio, duration).jpg— thumbnail / poster art
Add downloads/ as a Movies library in Jellyfin. The .nfo files are read automatically.
To skip NFO generation:
python -u download_videos.py --no-nfo- Login failed — Check your
.env, or log in manually with the configured browser profile. - 401 from Cloudflare Stream — The signed manifest URL expired or was not captured. Run the script again; it opens the watch page to get a fresh signed URL.
- Download stops halfway — Run the script again. Completed files are skipped.
- Browser window closes — The script closes the browser when it exits; downloads are handled by
yt-dlp.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Report bugs or suggest features via GitHub Issues.
Security issues? See SECURITY.md.
This tool is intended for personal use by paying Tyler Raw members to watch their own accessible videos offline. Do not share downloaded files — respect Tyler Raw's copyright and terms.
MIT