Skip to content

cca/panopto-archive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Archive Panopto Sessions

Panopto provides no way to bulk download sessions. This is a simple command-line tool for downloading sessions and their corresponding metadata. We want to:

  • ✅ Traverse the Panopto folder hierarchy starting at a given point
  • (TODO) Filter through sessions according to criteria (e.g. an option to not download private sessions)
  • ✅ Download video & caption files
  • ❌ Confirm videos transferred successfully using content hashes
  • ❓ Push the video files to cloud storage
  • ✅ Retain the video metadata alongside the sessions
  • ✅ Mirror the Panopto folder hierarchy in cloud storage

Setup

Create an OAuth2 Client

  • Panopto admin goes to System > OAuth2 Clients
  • New > make it a server-side client*
  • CORS URL: http://localhost & Redirect URL: http://localhost:9127/redirect
  • Copy the client ID and secret into the .env file (see example.env)

* This fake server-side weirdness is how the Panopto OAuth2 example was designed and could be avoided by rewriting it.

uv sync
# test (no downloads) with "CCA Departments" folder ID
uv run panochive --test c117dc01-bc96-4eca-a53a-ace50173fb6e

mise is also used to autoload the .env file and manage the python version, but these could be done manually, e.g. export SERVER=ccarts.hosted.panopto.com etc...

Usage

# download Panopto folder to local "dest" folder (data by default)
uv run panochive de58c934-a306-4aea-95c8-b45601224869 --dest path/to/dest
# recursively download everything in a portion of the folder hierarchy
uv run panochive -r de58c934-a306-4aea-95c8-b45601224869

Once downloaded, we can copy the files from their "dest" (data) folder to GCP using gcloud storage cp. Make sure to preserve the Panopto folder hierarchy, e.g. if you download ROOT/Libraries/CAPL Archive then the folder locally will be data/CAPL Archive. If you copy that to GCP, put it where it belongs under "Libraries", not in the bucket's root.

uv run panochive FOLDER_ID
gcloud storage cp --recursive "data/CAPL Archive" "gs://panopto_archive/Libraries"

Development

uv run pytest src/panochive/tests # test
uv run ruff format src/panochive # formatting
uv run ruff check src/panochive # type checking and linting

License

ECL-2.0

About

Archive Panopto sessions in bulk

Resources

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages