Skip to main content

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

Recommended easiest usage:

  1. Install pipx (if you don't have it):
    brew install pipx
    pipx ensurepath
    pipx install canvas_downloader
    canvas-downloader --help
    

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
    

🛠️ The Command Builder (Recommended)

Don't want to mess around with typing complex Terminal commands? We have a built-in web UI to click and configure your custom command!

If you installed via pipx or pip:

canvas-downloader --builder

If running from source:

uv run python downloader.py --builder

This will automatically open a local web server where you can drop in your API Token, Course ID, and check off any settings you want. Once you click "Copy Command", simply paste it back into your terminal to run it!


Manual Basic Usage (Without Builder)

If you prefer not to use the builder, copy the text below into a text editor, replace your values, paste into terminal, and run.

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


🛠️ Advanced Flags

If you are using the Web Builder, these options are available as easy-to-use checkboxes. If you are typing the command manually, you can customize the download by adding these flags:

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.

Metadata

Release files for canvas_downloader 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for canvas_downloader 0.1.1
File Size Uploaded
canvas_downloader-0.1.1.tar.gz 17.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for canvas_downloader 0.1.1
File Interpreter ABI Platform
canvas_downloader-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 45.5 kB

Release files / canvas_downloader-0.1.1.tar.gz

Download URL canvas_downloader-0.1.1.tar.gz
Size 17.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9e9d70c93264d5931f6a8353b3708821bfa6e1ba6364b4101392eac62c6e6c33
BLAKE2b-256 checksum
How to use checksums
8a60f31f1318187d0e3e20fb5513a5786b2b4bedf737aa31cc2f5e082a4e68f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / canvas_downloader-0.1.1-py3-none-any.whl

Download URL canvas_downloader-0.1.1-py3-none-any.whl
Size 28.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ea534a811d8d24b7ab40a8ae99736316bb73772c3e1f690c1e22d91fb6c5608c
BLAKE2b-256 checksum
How to use checksums
231b21535f235bc29c60925f72378ba35899b76df68628890bce3d4dc024351f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page