This guide explains how to download only specific lessons from a Thinkific course instead of downloading the entire course.
The Thinkific Downloader supports selective downloads using a JSON configuration file that specifies exactly which lessons you want to download. This is useful when you only need certain chapters or want to avoid downloading large files you don't need.
- Create or obtain a course data JSON file (see options below)
- Set the file path in your
.envfile:COURSE_DATA_FILE="my-selective-lessons.json" - Run the downloader:
python -m thinkific_downloader
You can specify the JSON file directly via command line:
python -m thinkific_downloader --json my-selective-lessons.json# Set in your .env file
COURSE_DATA_FILE="selective-lessons.json"
# Run with Docker
docker-compose upIf you've already run the downloader once:
-
Copy the generated progress file:
# Windows copy "downloads\\your-course-name\\.thinkific_progress.json" "selective-lessons.json" # Linux/Mac cp "downloads/your-course-name/.thinkific_progress.json" "selective-lessons.json"
-
Edit the file to remove unwanted lessons from the
download_tasksarray -
Keep the structure intact - only modify the contents of the arrays
Create a JSON file with this structure:
{
"analyzed_chapters": ["chapter_1", "chapter_3", "chapter_5"],
"download_tasks": [
{
"url": "https://embed-ssl.wistia.com/deliveries/video-id-here.bin",
"dest_path": "1. chapter-name\\1.lesson-name\\lesson-file.mp4",
"content_type": "video"
},
{
"url": "https://course-files.thinkific.com/document.pdf",
"dest_path": "1. chapter-name\\2.document-lesson\\document.pdf",
"content_type": "document"
}
]
}- Array of chapter IDs that have been processed
- Format:
["chapter_1", "chapter_2", "chapter_N"] - Used to track which chapters have been analyzed
Each task has three required fields:
url: Direct download URL for the contentdest_path: Local file path where content will be savedcontent_type: Type of content (video,document,html,audio)
| Content Type | Description | File Extensions |
|---|---|---|
video |
Video lessons (Wistia, MP4) | .mp4, .mov, .avi |
document |
PDF documents, slides | .pdf, .ppt, .pptx |
html |
Text lessons, notes | .html |
audio |
Audio files | .mp3, .m4a, .wav |
- Run the full download once to get the complete JSON
- Copy the progress file to
videos-only.json - Edit to keep only entries where
content_typeis"video" - Remove chapters you don't want from
analyzed_chapters - Set
COURSE_DATA_FILE="videos-only.json"in.env
- Get the complete JSON file
- Keep only the first 5 entries in
download_tasks - Update
analyzed_chaptersto match - Use the modified file
- Edit the JSON to remove large video entries
- Keep documents, text, and smaller videos
- Use the filtered JSON for download
- Use forward slashes (
/) or double backslashes (\\\\) in paths - Ensure destination directories exist or will be created
- Keep the original folder structure for organization
- Fewer tasks = faster completion
- Remove unnecessary content types to save bandwidth
- Use
CONCURRENT_DOWNLOADS=1for selective downloads to avoid rate limiting
- Ensure all URLs are accessible
- Verify file paths are valid for your operating system
- Test with a small subset first
COURSE_DATA_FILE env var not set.
Solution: Ensure the JSON file exists in the project root directory and the path in .env is correct.
Solution: Validate your JSON syntax using an online JSON validator or text editor with JSON support.
Solution: Check that the url fields in your JSON are still valid and accessible.
Solution: Ensure the destination directories are writable and you have sufficient disk space.
- See ENV_SETUP.md for authentication setup
- See README.md for general usage
- Enable
DEBUG=truefor detailed logging - Check the generated progress files for examples of proper JSON structure