Skip to content

jamubc/Canvas_Downloader

Repository files navigation

Canvas_Downloader

Open Source Educational Canvas LMS

Python 3.8+ PyPI Version License: MIT CLI Tool PyPI - Downloads

A fast, safe, and customizable tool to download course content from Canvas (Instructure).


canvas_downloader_image-2

Features:

  • Safe: Strictly read-only. Never modifies, deletes, or uploads any data.
  • Cross-Platform: Works on macOS, Windows, and Linux.
  • Optimized: Uses parallel downloading and smart rate-limiting to be fast without getting blocked.
  • Complete: Can download Files, Modules, Pages, and Assignments (including attached solutions/descriptions).
  • Flexible: download everything in structured folders, or flatten it; ignore specific files; pick specific courses.

Why?

  • I was tired of downloading course content manually
  • I wanted to have a backup of my courses
  • I wanted to be able to access my courses offline
  • I want to feed the downloaded content into a LLM
  • I want to turn my courses into a searchable database
  • I want to turn my courses into a quiz or practice test

⚡ Quick Start

Option 1: Install via Pip (Fastest) - 📦 PyPI - Version

This is the easiest way to use the tool. Get it directly from PyPI.

pip install canvas_downloader

Then run it anywhere:

canvas-downloader --help

Option 2: Run from Source (with uv)

  1. Install uv (if needed): brew install uv (macOS) or pip install uv (others).
  2. Clone the repo:
    git clone https://github.com/jamubc/Canvas_Downloader.git
    cd Canvas_Downloader
  3. Setup environment:
    uv venv
    uv pip install -r requirements.txt
  4. Run:
    uv run python downloader.py --help

Basic Usage

canvas-downloader \
    --api-token YOUR_API_TOKEN \
    --course-id YOUR_COURSE_ID \
    --output-dir ./my_course_download \
    --canvas-url https://canvas.instructure.com

(Replace YOUR_API_TOKEN, YOUR_COURSE_ID with real values. Use your school's URL for --canvas-url)

For more information see Canvas API Documentation


🛠 Flags

You can customize the download by adding these flags to the command above:

Flag Description
--include-assignments Recommended. Downloads assignment instructions and attached files (solutions, starter code, etc.) into an Assignments/ folder.
--include-submissions Download your own submissions (e.g. uploaded files, graded PDFs) into Assignments/{Name}/Submissions/.
--no-structure Flattens all files into a single directory instead of organizing them by Module/Week.
--ignore-pattern "*.ext" Skips files matching the pattern. Can be used multiple times.
Example: --ignore-pattern "*.zip" --ignore-pattern "*.m"
--no-optimize Disables parallel downloading and smart rate-limiting. Use this if you encounter errors or want a strictly sequential, slower download.
--force Force redownload of all files, ignoring any existing files (bypassing sync logic).
--canvas-url URL Base URL of your Canvas instance. Defaults to https://canvas.instructure.com.
Example: https://canvas.ubc.ca

Example Usage:

uv run python downloader.py \
    --api-token <TOKEN> \
    --course-id 123456 \
    --output-dir ./Fall2024_Backup \
    --canvas-url https://canvas.ubc.ca \
    --include-assignments \
    --ignore-pattern "*.mp4" 

🔄 Re-running

To download new content later, just run the same command again. The script is safe to run multiple times; it will overwrite existing files with the latest versions from Canvas.

🙋 Common Questions (FAQ)

Q: How do I download all my Canvas course contents at once? A: This tool is built exactly for that. It iterates through your entire course (Modules, Files, Assignments, Pages) and saves everything to your local computer in one go.

Q: Can I backup my Canvas courses before I lose access? A: Yes! Use this tool at the end of the semester to create a permanent, offline archive of your materials (PDFs, PPTXs, Videos, etc).

Q: Does this download videos and quiz content? A: It downloads files and assignment descriptions. Video support and specific quiz capture are currently being worked on (see Upcoming Features).

Issues with usage?

Im happy to help, please open an issue on GitHub.

Upcoming Features

  • Downloading Video files (currently unhandled)
  • AI Embedding
  • Plug in usage for 'canvas-mcp-tool' (please reach out if you are interested in testing it!)
  • Repomix integration

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A fast, safe, and customizable tool to download course content from Canvas (Instructure).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages