Echo360
Commandline tool for automated downloads of echo360 videos hosted by university
Install / Use
/learn @soraxas/Echo360README
Echo360 Videos Downloader
echo360 is a command-line Python tool that allows you to download lecture videos from any university's Echo360 system and echo360 Cloud platform. All that's required is the particular course's url. See the FAQ for tips on how to find it.
The way this script works should support all university's echo360 system in theory, see FAQ for details.
See it in action:
<p align="center"> <img width="700" height="auto" src="docs/images/demo.gif" alt="echo360 demo" /> </p>NEWS: It now works with echo360.org platform as well. Special thanks to @cloudrac3r and Emma for their kind offering of providing sources and helped debugging it. Read FAQ for details.
Getting Started
Automated Installation
Linux / MacOS
./run.sh COURSE_URL # where COURSE_URL is your course url
Windows
run.bat COURSE_URL # where COURSE_URL is your course url
The scripts will boostrap all installation and download all needed files on the fly.
pip
pip install echo360
echo360-downloader COURSE_URL # where COURSE_URL is your course url
Optional
- ffmpeg (for transcoding ts file to mp4 file) See here (windows) or here for a brief instructions of installing it in different OS.
Manual
The provided script automated every operations, and install all dependency in a local python virtual environment. You can also use the system-wise python installation by manual installation. Get started by first install all requirements:
pip install -r requirements.txt # or with: python -m pip install -r requirements.txt
Then run with:
python echo360.py
Operating System
- Linux
- OS X
- Windows
Usage
NOTE THAT all the below command you can substitute python echo360.py with ./run.sh (or run.bat if you are in windows)
Quick Start
>>> python echo360.py \
https://view.streaming.sydney.edu.au:8443/ess/portal/section/2018_S1C_INFO1001_ND
Script args
>>> usage: echo360.py [-h] [--output OUTPUT_PATH]
[--after-date AFTER_DATEYYYY-MM-DD)]
[--before-date BEFORE_DATE(YYYY-MM-DD] [--unikey UNIKEY]
[--password PASSWORD] [--setup-credentials]
[--download-phantomjs-binary] [--chrome] [--firefox]
[--echo360cloud] [--interactive] [--alternative_feeds]
[--debug] [--auto | --manual]
ECHO360_URL
Download lectures from portal.
positional arguments:
ECHO360_URL Full URL of the echo360 course page, or only the UUID
(which defaults to USYD). The URL of the course's
video lecture page, for example: http://recordings.eng
ineering.illinois.edu/ess/portal/section/115f3def-7371
-4e98-b72f-6efe53771b2a)
optional arguments:
-h, --help show this help message and exit
--output OUTPUT_PATH, -o OUTPUT_PATH
Path to the desired output directory. The output
directory must exist. Otherwise the current directory
is used.
--after-date AFTER_DATE(YYYY-MM-DD)
Only download lectures newer than AFTER_DATE
(inclusive). Note: this may be combined with --before-
date.
--before-date BEFORE_DATE(YYYY-MM-DD)
Only download lectures older than BEFORE_DATE
(inclusive). Note: this may be combined with --after-
date
--unikey UNIKEY, -u UNIKEY
Your unikey for your University of Sydney elearning
account
--password PASSWORD, -p PASSWORD
Your password for your University of Sydney elearning
account
--setup-credentials Open a chrome instance to expose an ability for user
to log into any website to obtain credentials needed
before proceeding. (implies using chrome-driver)
--download-phantomjs-binary
Force the echo360.py script to download a local binary
file for phantomjs (will override system bin)
--chrome Use Chrome Driver instead of phantomjs webdriver. You
must have chromedriver installed in your PATH.
--firefox Use Firefox Driver instead of phantomjs webdriver. You
must have geckodriver installed in your PATH.
--interactive, -i Interactively pick the lectures you want, instead of
download all (default) or based on dates .
--alternative_feeds, -a
Download first two video feeds. Since some university
have multiple video feeds, with this option on the
downloader will also try to download the second
video, which could be the alternative feed. Might
only work on some 'echo360.org' hosts.
--debug Enable extensive logging.
--auto Only effective for 'echo360.org' host. When set, this
script will attempts to automatically redirects after
you had logged into your institution's SSO.
--manual, -m [Deprecated] Only effective for 'echo360.org' host.
When set, the script requires user to manually
continue the script within the terminal. This is the
default behaviour and exists only for backward
compatibility reason.
Examples
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \ # Note this default to USYD's echo360
--output "~/Lectures" # Use full URL for other University
Download all available lectures
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \
--output "~/Lectures"
Download all lectures on or before a date
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \
--output "~/Lectures" \
--before-date "2014-10-14"
Download all lectures on or after a date
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \
--output "~/Lectures" \
--after-date "2014-10-14"
Download all lectures in a given date range (inclusive)
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \
--output "~/Lectures" \
--after-date "2014-08-26" \
--before-date "2014-10-14"
Use chrome driver (instead of phantomjs)
Note: sometime it works better than phantomjs in some system
>>> python echo360.py \
"041698d6-f43a-4b09-a39a-b90475a63530" \
--chrome
FAQ
Is my university supported?
This is first built for the echo system in the University of Sydney, and then validated in several other universities' echo system. In theory, as long as the url are in the format of:
https://$(hostname)/ess/portal/section/$(UUID)
or
https://echo360.org[.xx]/
or with a dot net variant
https://echo360.net[.xx]/
... then it should be supported.
The variables $(hostname) and $(UUID) are what differentiate different University's echo360 system. If there is no credentials needed (ie no need to login before accessing the page), then 90% of the time it should works. If login is needed, some extra work might need to be put in before it works for your university. If that is the case, create an issue to let me know.
As for echo360.org, see this.
How do I retrieve the Course URL for a course?
You should go to the main Echo360 Lecture page, which usually composed of all the lecturer recordings in a list format as shown below. It's the main page that lists all the recorded lectures and gives you the option to stream them or download them individually. This is important for downloading all the available videos from within the course.
<img height="auto" src="docs/images/course_page.png" alt="echo360 course main page" />You can usually find this link on your course's main webpage. If your course webpage only links directly to videos, then you should be able to navigate back by clicking the title of your course name (top of page).
The URL for the University of Sydney - 2017 semester 2 of CIVL4903 looks like
https://view.streaming.sydney.edu.au:8443/ess/portal/section/041698d6-f43a-4b09-a39a-b90475a63530
which you can verify is correct in the above screenshot. This should be the full URL you enter into the script, for all other universities' echo system.
The UUID (Unified Unique IDentifier) is the last element of the URL. So in the above example it's,
041698d6-f43a-4b09-a39a-b90475a63530
echo360 cloud
Echo360 cloud refers to web
Related Skills
qqbot-channel
344.1kQQ 频道管理技能。查询频道列表、子频道、成员、发帖、公告、日程等操作。使用 qqbot_channel_api 工具代理 QQ 开放平台 HTTP 接口,自动处理 Token 鉴权。当用户需要查看频道、管理子频道、查询成员、发布帖子/公告/日程时使用。
claude-opus-4-5-migration
96.8kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
docs-writer
99.8k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
344.1kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
