A point-and-click Windows app that logs into Canvas as you (handles
SSO/2FA normally, in a real browser window), scans one or more classes,
shows you everything it found, and downloads only what you tick — into a
clean Class > Module > Assignments/Resources folder structure.
This replaces the old command-line-only script with:
- A GUI instead of typing commands
- A scan first, then pick step — no more all-or-nothing downloads
- Support for queuing up multiple classes in one run (one login covers all of them)
| File | What it does |
|---|---|
canvas_sync_gui.py |
The app itself — run this |
canvas_core.py |
The engine (scanning/downloading logic) — don't need to touch it |
config.example.json |
A template for your settings (the app also saves/loads this automatically) |
requirements.txt |
The two Python packages this needs |
setup_windows.bat |
One-time installer — double-click once |
run_windows.bat |
Launches the app — double-click each time |
- Install Python if you don't have it: python.org/downloads. During install, check the box that says "Add Python to PATH."
- Put all the files above in one folder.
- Double-click
setup_windows.bat. It will:- Install
beautifulsoup4andplaywright(both free, open-source, no paid tiers) - Download the Chromium browser Playwright drives (~150MB, one-time)
- Install
- When it says "Setup complete," you're done with this part.
Double-click run_windows.bat (or run python canvas_sync_gui.py from a
Command Prompt in that folder). The app window has three sections:
- Canvas URL: your school's Canvas address, e.g.
https://ecpi.instructure.com(no trailing slash, no/courses/...) - Download folder: where everything gets saved. Use the Browse button.
- Click Save Settings so you don't have to re-type these next time.
- Paste a course link (or just the numeric course ID) in the first box,
e.g.
https://ecpi.instructure.com/courses/123456or just123456. - Type a short class name in the second box, e.g.
ET102— this becomes the folder name. - Click + Add Class to add more rows — add as many classes as you want synced in this run.
- Click Scan Courses.
First time only: a real Chromium window will pop up on your school's
Canvas login page. Log in normally (your school SSO / 2FA works fine
since it's a real browser). Once you can see your Canvas dashboard, come
back to the app and click OK on the popup. Your session is saved to
auth_state.json next to the app, so you won't have to log in again
until it expires.
Once scanning finishes, you'll see every class, its modules (weeks), and every item inside each module — files, assignments, pages, quizzes, discussions, external links — each with a checkbox in the Include column. Everything starts checked.
- Click a checkbox to toggle just that item.
- Click a module's or class's checkbox to select/deselect everything under it in one click.
- Use Select All / Select None at the top to reset the whole list.
When you're happy with your picks, click Download Selected. Progress and any errors show up in the Status box at the bottom.
<Download folder>/
ET102/
Week 1/
Assignments/
Essay Draft/
Essay Draft - instructions.html
Resources/
syllabus.pdf
Week 2/
...
EET191/
...
Quizzes and discussions don't have a downloadable file, so they're
skipped automatically (Canvas doesn't expose their content the same way).
External links are saved as .url shortcuts you can double-click to open
in a browser.
Just add multiple rows in Section 2 before clicking Scan Courses — the app logs in once and scans/downloads all of them in the same run, keeping each class in its own folder.
auth_state.jsonholds your saved login — don't share this file. Delete it any time to force a fresh login.- Re-running a scan/download won't re-download files you already have (it checks the destination folder first).
- Everything here is free, open-source tooling (Playwright + Beautiful Soup) — no paid add-ons or subscriptions required.