A modern, feature-rich Python utility to download courses from Thinkific platforms for personal offline learning with advanced parallel processing, intelligent progress monitoring, and smart file validation.
"With great power comes great responsibility." - This tool is designed to help learners access their purchased educational content offline. Please use it ethically and responsibly.
This tool is for personal educational use only. Please respect copyright laws and terms of service:
- β Use for personal offline learning
- β Support course creators by purchasing courses legally
- β Do NOT redistribute downloaded content
- β Do NOT use for commercial purposes
- β Do NOT violate course platform terms of service
The developer is not responsible for any misuse of this tool. Users are solely responsible for ensuring their usage complies with applicable laws and terms of service.
- π Parallel Processing - Download multiple files simultaneously (configurable 1-10 threads)
- π Rich Progress Monitoring - Beautiful terminal UI with real-time progress, speed, and ETA
- π§ Smart File Validation - Automatic integrity checking and corruption detection
βΆοΈ Resume Downloads - Intelligent partial download recovery and continuation- βοΈ Skip Existing Files - Automatic detection and skipping of completed downloads
- πΎ Atomic Resume/Backup System - Cross-platform safe status tracking and backup (Windows, Mac, Linux)
- π Exponential Retry Logic - Smart retry with jitter for failed downloads
- π¦ Rate Limiting - Configurable bandwidth limiting to respect servers
- π File Integrity Checks - SHA256 checksums and size validation
- πΎ Download Metadata - Persistent state tracking for resume capability
| Content Type | Status | Processing Engine | Features |
|---|---|---|---|
| π₯ Videos (Wistia) | β Full | wistia_downloader.py |
Multi-quality, chunks, resume |
| π₯ Videos (Other) | β Full | downloader.py |
Direct download, progress tracking |
| π HTML Content | β Full | downloader.py |
Clean extraction, formatting |
| π PDF Documents | β Full | downloader.py |
Direct download, validation |
| π΅ Audio Files | β Full | downloader.py |
MP3, M4A support |
| π― Quizzes | β Basic | downloader.py |
Structure extraction |
| π¨ Presentations | β Full | FFmpeg merge | Multi-slide processing |
- Modern Python Architecture - Clean, maintainable package structure
- Async/Sync Hybrid - Optimal performance for different content types
- Smart Progress Tracking - Rich terminal UI with real-time progress
- Intelligent Retry Logic - Exponential backoff with jitter
- Memory Efficient - Chunked downloads for large files
- Rich Terminal Interface - Beautiful progress bars and status updates
- Smart File Organization - Logical folder structure with clean naming
- Resume Support - Skip existing files, continue interrupted downloads
- Atomic Resume/Backup - Status file is always safely backed up and updated, works on Windows, Mac, Linux
- Multiple Quality Options - Choose video quality (720p, 1080p, etc.)
- Comprehensive Logging - Debug mode for troubleshooting
- Rate Limiting - Respectful downloading to avoid detection
- Session Management - Proper authentication handling
- Error Recovery - Graceful handling of network issues
- Validation - File integrity checks and cleanup
- Atomic Status File - Download status is always saved safely, with backup, for reliable resume
π§ FIRST TIME USERS: Before running the application, you MUST set up your environment variables. Follow our Complete Environment Setup Guide for step-by-step instructions on extracting authentication data from your browser.
Step 1: Get the Project
# Clone or download the project
git clone https://github.com/ByteTrix/Thinkific-Downloader.git
cd Thinkific-Downloader
# Or download and extract ZIP, then navigate to project directoryStep 2: Setup Environment
# Create your .env file
cp .env.example .env
# Edit .env with your course details - See detailed guide belowπ Complete Environment Setup Guide β Click here for step-by-step instructions
Step 3: Run with Docker
# Option 1: Docker Hub
docker pull kvnxo/thinkific-downloader
docker run -it --rm -v $(pwd)/downloads:/app/downloads --env-file .env kvnxo/thinkific-downloader
# Option 2: GitHub Packages
docker pull ghcr.io/bytetrix/thinkific-downloader
docker run -it --rm -v $(pwd)/downloads:/app/downloads --env-file .env ghcr.io/bytetrix/thinkific-downloader
# Option 3: Docker Compose (recommended)
docker-compose up# Step 1: Clone the project
git clone https://github.com/ByteTrix/Thinkific-Downloader.git
cd Thinkific-Downloader
# Step 2: Install dependencies
pip install -r requirements.txt
# Step 3: Configure environment
cp .env.example .env
# β οΈ IMPORTANT: See ENV_SETUP.md for detailed configuration instructions
# Step 4: Run the downloader
# Update environment variables in .env file
python thinkificdownloader.pyGet the latest source code:
# Clone the repository
git clone https://github.com/ByteTrix/Thinkific-Downloader.git
cd Thinkific-Downloader
# Setup environment variables
cp .env.example .env
# β οΈ IMPORTANT: Follow the complete setup guide: ENV_SETUP.md
docker-compose up
# Or run with Python
pip install -r requirements.txt
python thinkificdownloader.pyResume/Backup System:
- Download status is tracked in
.download_status.json(atomic, cross-platform)- A backup
.download_status.json.bakis created automatically before each update- If interrupted, simply rerun the downloader to resume from where you left off
- Works seamlessly on Windows, Mac, and Linux
π Need detailed setup instructions? Check out our comprehensive SETUP.md guide for step-by-step installation, troubleshooting, and configuration options.
π¨βπ» Developer? Visit DEVELOPMENT.md for architecture overview, API reference, and contribution guidelines.
π― Want to download specific lessons only? See our SELECTIVE_DOWNLOAD.md guide for downloading individual chapters or lessons instead of the entire course.
π¨ BEFORE YOU START: Follow our Complete Environment Setup Guide for step-by-step instructions on extracting authentication data from your browser.
Configure advanced features via environment variables or .env file:
# ===============================================
# REQUIRED AUTHENTICATION
# ===============================================
COURSE_LINK="" # Thinkific course URL
COOKIE_DATA="" # Browser cookies for authentication
CLIENT_DATE="" # Client date header
# ===============================================
# BASIC SETTINGS
# ===============================================
VIDEO_DOWNLOAD_QUALITY="720p" # Video quality (Original File, 720p, 1080p, etc.)
OUTPUT_DIR="./downloads" # Download directory (defaults to ./downloads)
# ===============================================
# ENHANCED FEATURES
# ===============================================
CONCURRENT_DOWNLOADS=3 # β οΈ CRITICAL: Keep β€3 due to Thinkific rate limit (3 req/sec)
RETRY_ATTEMPTS=3 # Number of retry attempts for failed downloads
DOWNLOAD_DELAY=1.0 # Delay between downloads (seconds)
RATE_LIMIT_MB_S= # Rate limit in MB/s (empty = unlimited)
# Feature toggles
VALIDATE_DOWNLOADS=true # Enable file integrity validation
RESUME_PARTIAL=true # Enable resume for partial downloads
DEBUG=false # Enable debug logging
# ===============================================
# ADVANCED SETTINGS
# ===============================================
FFMPEG_PRESENTATION_MERGE=false # Enable FFmpeg presentation merging
### **β‘ Quick Start Commands**
```bash
# Run as package
python -m thinkific_downloader
# Run as script
python thinkidownloader3.py
# With environment file
python -m thinkific_downloader --config .env
# Docker compose
docker-compose up
Default Location: All courses are downloaded to ./downloads/ directory in your project folder.
π downloads/
βββ π Course Name/
βββ π 01. Introduction/
β βββ π 01. Welcome Video/
β β βββ π₯ welcome-video.mp4
β βββ π 02. Course Overview/
β βββ π course-overview.html
β βββ π quiz-structure.html
βββ π 02. Getting Started/
β βββ π 01. Setup Instructions/
β βββ π₯ setup-instructions.mp4
β βββ π setup-guide.pdf
β βββ π¨ presentation-slides.mp4
βββ π thinkific_progress.json
Customization: Set OUTPUT_DIR=./my-custom-path in your .env file to change the download location.
| Type | Extensions | Processing | Notes |
|---|---|---|---|
| Videos | .mp4, .webm, .mov |
Wistia + Direct | Quality selection, resume support |
| Audio | .mp3, .m4a, .ogg |
Direct download | Metadata preservation |
| Documents | .pdf, .docx |
Direct download | Validation checks |
| Web Content | .html |
Content extraction | Clean formatting |
| Presentations | Multi-slide | FFmpeg merge | Combined video output |
| Quizzes | .json |
Structure export | Question/answer format |
Q: How does resume work?
- The downloader automatically tracks download status in
.download_status.json. - Before updating, a backup
.download_status.json.bakis created (atomic, safe). - If interrupted, just rerun the downloader. It will resume partial downloads, skip completed files, and retry failed ones.
- No manual intervention needed.
Q: Is it safe on Windows, Mac, Linux?
- Yes! The resume/backup system uses atomic file operations and works on all major platforms.
Q: Where is the status file stored?
- In the current working directory (where you run the downloader).
Q: Can I delete the status file?
- Yes, but you will lose resume progress. The backup file is for safety only.
Q: How do I get the required authentication data?
- Open your course in a browser and log in
- Open Developer Tools (F12)
- Go to Network tab and refresh the page
- Search for requests containing
course_player/v2/courses/ - Click on the matched request (there should be one)
- Click on "Raw" tab for easier copying
- First, adjust the
COURSE_LINKin your.envfile to match the course URL - Look for "set-cookie" and copy the value into
COOKIE_DATA - Copy the "date" value into
CLIENT_DATE
Q: How often do I need to update authentication?
- Authentication typically expires after 24-48 hours
- You'll get authentication errors when it expires
- Simply update the
.envfile with fresh values
Q: Will I get banned for using this? The tool includes safety features, but follow best practices:
- Use conservative settings (max 2-3 concurrent downloads)
- Add delays between downloads (1-2 seconds)
- Don't run multiple instances simultaneously
- Take breaks between large downloads
Q: What if downloads fail?
- The tool has automatic retry with exponential backoff
- Use resume functionality - restart to skip completed files
- Check logs with
LOG_LEVEL=DEBUGfor detailed troubleshooting - Verify authentication hasn't expired
Q: Can I download specific content types only? Currently downloads entire courses, but you can:
- Stop the process and keep what's downloaded
- Use file filters in your download directory
- Future versions may include selective downloading
Q: Why use Docker?
- β FFmpeg included - No manual installation
- β Consistent environment - Works everywhere
- β
Easy updates -
docker pullfor latest version - β Isolated - Doesn't affect your system
Q: How do I update the Docker image?
docker pull kvnxo/thinkific-downloader:latest
docker-compose up --force-recreateQ: FFmpeg not found error?
- Docker: FFmpeg is pre-installed
- Python: Install with
sudo apt-get install ffmpeg(Linux) orbrew install ffmpeg(Mac) - Windows: Download from https://ffmpeg.org/download.html
Q: Memory issues with large files?
- The tool uses chunked downloading to minimize memory usage
- For very large files, ensure you have enough disk space
- Consider using
CONCURRENT_DOWNLOADS=1for memory-constrained systems
Q: Downloads failing or getting skipped?
- Check your
CONCURRENT_DOWNLOADSsetting - must be β€3 for Thinkific rate limit - Thinkific has ~3 requests/sec rate limit - higher values cause API errors
- Try reducing to
CONCURRENT_DOWNLOADS=2orCONCURRENT_DOWNLOADS=1 - Increase
DOWNLOAD_DELAY=2.0for additional safety
π¨βπ» For developers: See DEVELOPMENT.md for complete development setup, architecture overview, API reference, testing guidelines, and contribution workflow.
- π΄ Fork the repository
- πΏ Create a feature branch
- β Add tests for new features
- π Update documentation
- π Submit a pull request
- π Documentation: SETUP.md and DEVELOPMENT.md
- π Bug Reports: GitHub Issues
- π‘ Feature Requests: GitHub Discussions
- π¨οΈ Community: Join discussions and share tips
- β Check existing issues for duplicates
- β Include your operating system and Python version
- β
Provide relevant log output (use
LOG_LEVEL=DEBUG) - β Describe steps to reproduce the problem
- β Include the error message or unexpected behavior
**Environment:**
- OS: Windows 11 / macOS 13 / Ubuntu 22.04
- Python: 3.11.2
- Docker: 24.0.6 (if applicable)
**Error:**
[Paste error message or describe issue]
**Steps to reproduce:**
1. Set environment variables...
2. Run command...
3. Error occurs at...
**Expected behavior:**
[What you expected to happen]
**Logs:**
[Paste relevant log output with LOG_LEVEL=DEBUG]
If this tool helps you with your learning journey, please star the repository!
- π΄ Fork and improve the code
- π Documentation improvements
- π§ͺ Testing on different platforms
- π¨ UI/UX enhancements
- π Support course creators by purchasing their content legally
- π€ Share responsibly with fellow learners
- π Use for learning - respect intellectual property
- π€ Give back to the open-source community
This tool is provided for educational purposes only. By using this software:
- β You agree to use it only for courses you have legally purchased
- β You agree to respect copyright laws and platform terms of service
- β You agree not to redistribute downloaded content
- β You understand the risks and take full responsibility
- The developers are not responsible for any misuse of this tool
- Users are solely responsible for compliance with applicable laws
- This tool is provided "as-is" without warranty of any kind
- Course platforms may update their systems, breaking compatibility
This project is a modern Python rewrite and enhancement of the original:
- Thinki-Downloader by @sumeetweb - The original foundation and inspiration for this modern Python implementation, I'm grateful for the foundational work that made this enhanced version possible.
This project is licensed under the MIT License - see the LICENSE file for details.
- β Commercial use allowed
- β Modification allowed
- β Distribution allowed
- β Private use allowed
- β Liability - No warranty provided
- β Warranty - Use at your own risk
"Education is the most powerful weapon which you can use to change the world." - Nelson Mandela
This tool exists to help learners access their purchased educational content offline. Use it responsibly, support course creators, and never stop learning.
Happy Learning! π Remember to support course creators by purchasing their content legally!
- π Homepage: GitHub Repository
- π¦ Docker Hub: kvnxo/thinkific-downloader
- π Issues: Report Bugs
- π¬ Discussions: Community
- π License: MIT License
