A Python library for downloading videos from UW Panopto
Project description
UW Panopto Downloader
A Python library and CLI tool for downloading and processing videos from University of Washington's Panopto. Use at your own risk!
Overview
Tired of taking classes and forgetting everything the next quarter? Tired of having to rewatch the same lecture over and over again only for a few key points? Scared of graduating and losing access to all this institutional knowledge? UW Panopto Downloader might be just what you're looking for!
Key Features
- Video Downloads: Log in to Panopto and batch download videos from course pages
- Audio Conversion: Convert videos to audio format for efficient storage and mobile listening
- Transcription: Generate accurate transcripts with timestamps either locally using OpenAI's Whisper or Google Cloud Speech-to-Text
- Metadata Management: Organize videos with tags, notes, and searchable transcripts
- Store Locally: Keep all your videos, audio, and transcripts in a structured format on your local machine with a SQLite database for metadata indexing
Installation
pip install uw-panopto-downloader
Requirements
- Python 3.12 (exactly 3.12 if you want any hope of using the Whisper model)
- FFmpeg installed on your system
- Google Cloud credentials (for transcription features)
Quick Start
Downloading Videos
uwpd download --url "https://uw.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=..."
Converting Videos to Audio
uwpd convert path/to/videos
Transcribing Audio with Google Cloud
uwpd cloud-transcribe path/to/audio.mp3 --language en-US
Transcribing Audio with Local Whisper Model
uwpd transcribe path/to/audio.mp3
Searching Transcripts
uwpd db search "neural networks" --transcript
Command Reference
The CLI is organized into the following main commands:
Core Commands
| Command | Description |
|---|---|
download |
Download videos from UW Panopto |
convert |
Convert video files to audio format |
cloud-transcribe |
Transcribe audio files using Google Cloud Speech-to-Text |
transcribe |
Transcribe audio files using local Whisper model |
config |
View or update configuration |
version |
Show the current version |
Database Commands
| Command | Description |
|---|---|
db list |
List videos in the database |
db search |
Search videos in the database |
db info |
Display detailed information about a video |
db tag |
Add or remove a tag for a video |
db tags |
List all available tags with usage count |
db delete |
Delete a video from the database |
db note |
Add or update a note for a video |
db stats |
Show database statistics |
db migrate |
Migrate existing files to the database |
Detailed Usage
Downloading Videos
uwpd download --url "https://uw.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=..." \
--output ~/Videos/CSE142 \
--workers 3 \
--headless
This command will:
- Open a browser window for you to log in
- After login, automatically extract available videos
- Prompt confirmation before downloading
- Use 3 concurrent downloads for speed
- Store metadata in the local database
Google Cloud Speech-to-Text Transcription
uwpd cloud-transcribe ~/Videos/lecture.mp3 \
--output ~/Transcripts/lecture.txt \
--language en-US \
--credentials path/to/google-credentials.json
Features:
- Automatically splits long audio into chunks separated by silence for better accuracy
- Produces timestamped transcripts for easy reference
- Stores transcripts in searchable database
Configuration
Configuration is stored in ~/.uw-panopto-downloader/config.json. You can update it using:
uwpd config --download-dir ~/Videos \
--max-workers 4 \
--headless True \
--audio-bitrate 192k
Storage Management
The tool uses a structured storage approach:
- Content is stored in
~/.uw-panopto-downloader/content/ - Subdirectories for videos, audio, and transcripts
- Symlinks created to original locations when desired
- SQLite database tracks metadata at
~/.uw-panopto-downloader/metadata.db
Google Cloud Integration
This project leverages Google Cloud Speech-to-Text for high-quality transcription.
For optimal transcription quality, the tool:
- Automatically converts audio to mono
- Splits audio at natural silence points
- Uses word-level time offsets for timestamps
- Assembles chunks into a cohesive transcript
Development
To contribute to this project:
git clone https://github.com/elimelt/uw-panopto-downloader.git
cd uw-panopto-downloader
pip install -e ".[dev]"
Bumping Version
Use the provided script to bump the version before pushing changes/merging PRs (only for maintainers):
./bump-version.sh patch # or minor or major
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Created by Elijah Melton (elimelt@uw.edu)
- Submitted for SWECCathon 2025!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uw_panopto_downloader-1.1.5.tar.gz.
File metadata
- Download URL: uw_panopto_downloader-1.1.5.tar.gz
- Upload date:
- Size: 35.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f6a1a24882344e79e0f9fcaf4be6cd346859a3d18fac803bf02057bcf2ee743
|
|
| MD5 |
f44e49b3e02ccbee0af5abcf441a0806
|
|
| BLAKE2b-256 |
ca1277209e61f9ec62f02fdf3336b25e6dd20eb19d632e5e57debc73b451dbf2
|
File details
Details for the file uw_panopto_downloader-1.1.5-py3-none-any.whl.
File metadata
- Download URL: uw_panopto_downloader-1.1.5-py3-none-any.whl
- Upload date:
- Size: 45.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
beb4c964fcde8862fd12587cd292189b4362009a437335c7376fb014adc16182
|
|
| MD5 |
1b1147957630ca4b612de591820488de
|
|
| BLAKE2b-256 |
a8184b1c03b332ce65d0c110a421fce4753ce7c6e9f73a7ab3c78da82213d2c8
|