
The Skool Downloader is a Go-based CLI utility that I wrote over the weekend. I was about to leave a Skool community and wanted to download my favorite courses before leaving. I couldn't figure out a simple way to download them manually, so I decided to vibe code this tool to automate the process. In simple terms, it scrapes a Skool classroom page, based on the provided URL, and downloads all Loom and YouTube videos from that page.
Version 2.0.0 represents a major upgrade with several important changes:
skool-loom-dl to skool-downloader to reflect broader video supportskool-downloader-linux-amd64skool-downloader-linux-arm64skool-downloader-windows-amd64.exeskool-downloader-windows-arm64.exeskool-downloader-darwin-amd64skool-downloader-darwin-arm64chmod +x skool-downloader-*Note: Older versions were called
skool-loom-dlbefore release v2.0.0
Bash1git clone https://github.com/fx64b/skool-downloader 2cd skool-downloader 3 4go build
Recommended: Using email/password for authentication
Bash./skool-downloader -url="https://skool.com/yourschool/classroom/your-classroom" -email="your@email.com" -password="yourpassword"
Alternative: Using cookies for authentication
Bash./skool-downloader -url="https://skool.com/yourschool/classroom/your-classroom" -cookies="cookies.json"
Note: Email/password authentication is more reliable as it handles session management automatically. Cookie-based authentication may fail if cookies expire or are invalid.
| Option | Description | Default |
|---|---|---|
-url | URL of the skool.com classroom page | (required) |
-email | Email for Skool login (recommended auth method) | - |
-password | Password for Skool login (used with email) | - |
-cookies | Path to cookies file (alternative to email/password) | - |
-output | Directory to save videos | downloads |
-wait | Page load wait time in seconds | 2 |
-headless | Run browser headless (set to false for debugging) | true |
Run the tool in a containerized environment with all dependencies included:
Bash1# Build image 2docker build -t skool-downloader . 3 4# Run container with email/password authentication 5docker run -v $(pwd)/downloads:/data skool-downloader \ 6 -url="https://skool.com/yourschool/classroom/path" \ 7 -email="your@email.com" \ 8 -password="yourpassword" 9 10# Run with cookies file 11docker run -v $(pwd)/downloads:/data -v $(pwd)/cookies.json:/cookies.json skool-downloader \ 12 -url="https://skool.com/yourschool/classroom/path" \ 13 -cookies="/cookies.json"
The Docker image includes:
If you choose to use cookies instead of email/password:
-cookies parameter-wait=5 or higherpip install -U yt-dlp)-headless=false to see the browser and debugContributions are welcome! Please feel free to submit a Pull Request.
This project includes comprehensive unit and integration tests.
Run unit tests with coverage:
Bash1# Run all tests 2go test -v ./... 3 4# Run tests with coverage 5go test -v -coverprofile=coverage.out -covermode=atomic ./... 6 7# View coverage report 8go tool cover -func=coverage.out
The unit tests cover:
Run Docker-based integration tests to verify the full application with yt-dlp:
Bash1# Make the script executable (first time only) 2chmod +x test-integration.sh 3 4# Run integration tests 5./test-integration.sh
The integration tests verify:
The project uses GitHub Actions for automated testing:
Lint and Build (lint-and-build.yml): Runs on every push and PR
Docker Integration Tests (docker-integration-test.yml): Runs on every push and PR
To create a new release with cross-platform binaries:
v2.0.0)The workflow will automatically:
This project is licensed under the MIT License - see the LICENSE file for details.