Echo360 Downloader

June 20, 2026 · View on GitHub

Copier

Automated lecture downloading from Echo360 using Playwright and ffmpeg.

Requirements

  • Python 3.11+
  • ffmpeg on PATH
  • An Echo360 account (primarily designed for University of Melbourne, but should work for other instances too — untested)

Windows

# Install ffmpeg (via winget)
winget install ffmpeg

# Or manually: download from https://ffmpeg.org/download.html#build-windows
# and add the bin\ folder to your PATH

# Install uv (if not already installed)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Linux / macOS

# Debian/Ubuntu
sudo apt install ffmpeg

# macOS
brew install ffmpeg

# Arch
sudo pacman -S ffmpeg

Installation

uv tool install git+https://github.com/MRDGH2821/echo360-downloader.git
playwright install chromium

Usage

1. Login (optional)

If you haven't logged in before, list and download will automatically open a browser for SSO. Or run the login step explicitly:

echo360-dl login

Session cookies are saved automatically to:

PlatformLocation
Linux / macOS~/.local/state/echo360/state.json
Windows%LOCALAPPDATA%\echo360\state.json

2. List lectures in a course

echo360-dl list <section-url>

3. Download lectures

From a course section URL

Download all lectures (interactive selection by default):

echo360-dl download <section-url>

Download a specific lecture by number (1-based):

echo360-dl download < section-url > 5

Download all lectures explicitly:

echo360-dl download < section-url > ALL

From a direct media URL

Download a single video by its public media link (no login required):

echo360-dl download https://echo360.net.au/media/ < uuid > /public

With a custom output name:

echo360-dl download https://echo360.net.au/media/ -n "Lecture 5 Notes" < uuid > /public

Options

FlagDescription
-o, --output-dirRoot download directory (default: ./downloads)
--headedShow the browser window (default: headless)
-n, --nameCustom output folder name (media URLs only)

4. Batch download

Download all courses from a YAML config file:

# Create config (auto-generated if missing)
echo360-dl batch courses.yaml

The YAML file supports a parallel setting for concurrent downloads:

parallel: 1 # sequential (default)
courses:
  - url: https://echo360.net.au/section/<uuid>

Set parallel: 3 or parallel: 4 to download multiple streams at once.

Results are written to a separate status file (<config>_status.yaml, e.g. courses_status.yaml) so your original config stays clean. Re-run the same command to skip already-completed courses — the status file is read on startup to determine what's already done.

5. Compress oversized videos

If any downloaded videos are too large for submission (e.g. >500 MB), compress them:

echo360-dl compress downloads/

Output structure

downloads/
├── COURSE001 - Example Course/
│   ├── 2026-03-04_15:15 - Go to class .../
│   │   ├── combined.mp4
│   │   ├── screen.mp4
│   │   └── camera.mp4
│   └── ...
├── COURSE002 - Example Course/
│   └── ...
└── COURSE003 - Example Course/
    └── ...

Each lecture folder contains up to 3 files:

FileContent
combined.mp4Muxed camera + screen + room audio
screen.mp4Screen capture only (no audio)
camera.mp4Presenter camera feed only

Direct media URL downloads create a single folder per video:

downloads/
└── <video title>/
    └── combined.mp4

Troubleshooting

Login fails / session expired

Delete the saved session and log in again:

rm ~/.local/state/echo360/state.json
echo360-dl login

ffmpeg errors / corrupted output

Ensure ffmpeg is up to date. If downloads stall, try with --headed to watch what the browser is doing.

Downloads are very slow

Echo360 streams use CloudFront-signed URLs that expire after ~24 hours. If a download is interrupted, re-run the command — it will start fresh with new signed URLs.

Licence

See LICENCE