Skip to main content

Circle Course Downloader

PyPI Python License: MIT

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

Circle Course Downloader opens a dedicated Chromium profile, lets you sign in normally, discovers videos from course pages or standalone community posts, 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.
  • Standalone page downloads for community posts and events with a single embedded video.
  • 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.

For a single community post or event page with one embedded video, use download-standalone:

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

Use download for full course pages that list lessons under /sections/.../lessons/....

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

Download a course

circle-course-downloader download [OPTIONS] COURSE_URL

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

Download a standalone page

circle-course-downloader download-standalone [OPTIONS] PAGE_URL

Examples:

circle-course-downloader download-standalone "https://your-community.example.com/c/eventos/my-event" --dry-run
circle-course-downloader download-standalone "https://your-community.example.com/c/eventos/my-event" --output-dir "./my-videos"

Both commands share the same options:

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 videos and print the yt-dlp commands without downloading videos.

--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 -r requirements.txt
.\.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
.\.venv\Scripts\circle-course-downloader download-standalone --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 and standalone page 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.

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.4.tar.gz (13.4 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.4-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: circle_course_downloader-0.1.4.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for circle_course_downloader-0.1.4.tar.gz
Algorithm Hash digest
SHA256 a5bd7a0617841440133fa2ce8602290875b78568f05dea06f480e78a2811a49c
MD5 e641287b3d78f4fdb067a2706bef6a65
BLAKE2b-256 7a116787faa759b99c25846597aefbba632bb541034abc7475e30e727d64de74

See more details on using hashes here.

Provenance

The following attestation bundles were made for circle_course_downloader-0.1.4.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.4-py3-none-any.whl.

File metadata

File hashes

Hashes for circle_course_downloader-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 bcb3b1565c458240350d2471344c92a5f28e302daaf6d66a74d420eae8fd9619
MD5 2625dc325185781c925ab7598e76bc3c
BLAKE2b-256 cbc9756450bdc0cfc056f89bd83776abddb678d225b8b43549dc744d10466e87

See more details on using hashes here.

Provenance

The following attestation bundles were made for circle_course_downloader-0.1.4-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.

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 files

0.1.3

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page