Skip to main content

Personal downloader for Circle course lesson videos accessible from your own account.

Project description

Circle Course Downloader

PyPI Python License: MIT

A small, practical CLI for saving Circle course videos that you can already access with your own account.

Circle Course Downloader opens a dedicated Chromium profile, lets you sign in normally, discovers course lessons through the authenticated page, and downloads the video streams with yt-dlp. It is built for personal offline viewing, backups, and unreliable connections.

This project is unofficial and is not affiliated with Circle. It does not bypass DRM, paywalls, 2FA, captchas, or access controls. Use it only for content you are authorized to view and download.

Highlights

  • Browser-only authentication: no terminal passwords, copied cookies, or pasted tokens.
  • Reusable local session stored in a dedicated Playwright Chromium profile.
  • Course lesson discovery from real Circle course pages.
  • Video URL detection for Circle HLS, direct video links, YouTube, Vimeo, Wistia, Loom, Mux, and Cloudflare Stream.
  • yt-dlp downloads with resume support and MP4 merge output.
  • manifest.json and manifest.csv exports for auditing what was found.
  • Dry-run mode for inspecting generated download commands before saving media.

Installation

Install the package and the Playwright browser runtime:

python -m pip install circle-course-downloader
python -m playwright install chromium

Python 3.11 or newer is required.

Quick Start

Run the downloader with a full Circle course URL:

circle-course-downloader download "https://your-community.example.com/c/course-slug"

On the first run, a Chromium window opens. Sign in to Circle in that browser, return to the terminal, and press Enter.

After that, the CLI reuses the same dedicated browser profile for future downloads:

circle-course-downloader download "https://your-community.example.com/c/another-course"

Downloaded videos are saved to downloads/ by default.

How It Works

  1. Opens the requested Circle course page in a persistent Chromium profile.
  2. If login is required, waits while you authenticate in the browser.
  3. Saves the browser session under .auth/.
  4. Discovers lesson links from the course page.
  5. Visits each lesson, finds candidate video URLs, and classifies the provider.
  6. Writes a manifest and downloads each available video with yt-dlp.

The default local files are:

.auth/session-browser-profile/
.auth/session.json
downloads/manifest.json
downloads/manifest.csv
downloads/01 - Lesson title.mp4

Generated manifests can contain signed media URLs. Do not publish or commit them.

CLI Usage

circle-course-downloader download [OPTIONS] COURSE_URL
Option Description
--output-dir PATH Save videos and manifests somewhere other than downloads/.
--session PATH Use a different exported session file. The browser profile is stored next to it.
--force-login Delete the saved auth state and open a fresh visible login browser.
--headless Run Chromium without a visible window after a saved browser profile exists.
--dry-run Discover lessons and print the yt-dlp commands without downloading videos.

Examples:

circle-course-downloader download "https://your-community.example.com/c/course-slug" --dry-run
circle-course-downloader download "https://your-community.example.com/c/course-slug" --output-dir "./my-videos"
circle-course-downloader download "https://your-community.example.com/c/course-slug" --force-login
circle-course-downloader download "https://your-community.example.com/c/course-slug" --headless

--headless is useful only after a saved browser profile already exists. First login always uses a visible browser window.

Install From Source

Clone the repository, create a virtual environment, install the package, and install Chromium for Playwright:

python -m venv .venv
.\.venv\Scripts\python -m pip install .
.\.venv\Scripts\python -m playwright install chromium

Then run the CLI from the virtual environment:

.\.venv\Scripts\circle-course-downloader download "https://your-community.example.com/c/course-slug"

For development and publishing tools:

.\.venv\Scripts\python -m pip install -r requirements.txt

Development

Run the local checks before opening a pull request:

.\.venv\Scripts\python -m pytest
.\.venv\Scripts\python -m compileall .\src
.\.venv\Scripts\python -m build
.\.venv\Scripts\python -m twine check dist/*
.\.venv\Scripts\circle-course-downloader --help
.\.venv\Scripts\circle-course-downloader download --help

The package metadata is defined in pyproject.toml, and the CLI entry point is:

circle-course-downloader = circle_courses_downloader.cli:main

Safety And Privacy

Circle Course Downloader uses its own Chromium profile under .auth/. It does not read cookies, sessions, or tokens from your default browser.

Contributing

Contributions are welcome when they keep the project focused on the browser-only Circle course download flow.

Good first improvements include:

  • Better provider detection for embedded video platforms.
  • Clearer error messages for expired sessions or unavailable lessons.
  • More fixture-based parser tests.
  • Cross-platform documentation polish.

Please read CONTRIBUTING.md and SECURITY.md before opening a pull request.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

circle_course_downloader-0.1.3.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

circle_course_downloader-0.1.3-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file circle_course_downloader-0.1.3.tar.gz.

File metadata

  • Download URL: circle_course_downloader-0.1.3.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for circle_course_downloader-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4fc1c5da02cbb90c6d6c379cb437c04ef890a97979035565623feaf41ce33027
MD5 899c4671cc03f0498c0ec6cd411d30d8
BLAKE2b-256 8f9639ea6bdd817e0f18d5d4d767def0fb5ee5efe0ee27abcee73f70b6075b99

See more details on using hashes here.

Provenance

The following attestation bundles were made for circle_course_downloader-0.1.3.tar.gz:

Publisher: publish.yml on paladini/circle-courses-downloader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file circle_course_downloader-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for circle_course_downloader-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 48850ccd0d1c841c7376a657787248a455526fbcf27b4a1dc568b1665aad3a18
MD5 257a5b8630e5d16e1a130dfa46441411
BLAKE2b-256 e548a205f3880aaac3a1d662c7c5aefdd01cabdb29396c219d58f84d8abe424a

See more details on using hashes here.

Provenance

The following attestation bundles were made for circle_course_downloader-0.1.3-py3-none-any.whl:

Publisher: publish.yml on paladini/circle-courses-downloader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page