Download online courses for offline access – of course! 📚
→ View Documentation & Homepage
# Install
npm install -g offcourse
# Download a course
offcourse sync <course-url>
# Or run without installing
npx offcourse sync <course-url>Requires Node.js 22+ and ffmpeg for HLS videos.
| Platform | URL Pattern |
|---|---|
| Skool | skool.com/community/classroom |
| HighLevel | member.*.com/courses/... |
| LearningSuite | *.learningsuite.io/student/... |
# Sync a course (auto-detects platform)
offcourse sync <url>
# Sync with options
offcourse sync <url> --skip-videos # Text only
offcourse sync <url> --dry-run # Preview
offcourse sync <url> --limit 5 # Test with 5 lessons
# Unlock sequential content (LearningSuite)
offcourse complete <url>
# Configuration (optional)
offcourse config set outputDir ~/Courses # Default: current directory
offcourse config set videoQuality 720p # Default: highest
offcourse config set concurrency 4 # Parallel browser tabs (1-8)Both course scanning and content extraction run in parallel using multiple browser tabs (default: 4). This speeds up the entire process significantly compared to sequential processing. All tabs share the same authenticated session.
git clone https://github.com/sebastian-software/offcourse.git
cd offcourse
npm install
npm run build
npm link # optional: link globallynpm run dev # Watch mode
npm run lint # ESLint
npm run typecheck # TypeScript
npm test # Tests
npm run release # Release to npm- Create
src/scraper/newplatform/with:auth.ts– Session detectionnavigator.ts– Course structureextractor.ts– Content extractionschemas.ts– Zod schemas
- Add CLI command in
src/cli/commands/ - Register in
src/cli/index.ts
Thanks to Sindre Sorhus for the excellent packages powering this project: slugify, conf, delay, execa, ky, p-queue, p-retry.
MIT