Case Study · Confidential North American higher-ed institution

End-to-End Automated Lecture Capture: Canvas + Panopto + Python Orchestration

How UnlockLive built a fully automated lecture-capture platform integrating Canvas LMS and Panopto with Python and FastAPI — auto-publishing ~3,000 lectures per term, cutting administrative overhead by 80%, and giving every recording a verifiable audit trail.

  • IndustryEducation
  • Year2024
  • CountryUSA
  • Duration6 months
End-to-End Automated Lecture Capture: Canvas + Panopto + Python Orchestration hero screenshot

At-a-glance results

  • 80%Reduction in instructional-support administrative overhead
  • ~3,000Lectures per term auto-published, end to end
  • 100%Recordings audit-logged from capture through Canvas publish
  • 4xFaster post-class publishing — minutes, not next-day

The challenge

A North American higher-ed institution had Panopto for lecture capture and Canvas LMS for course delivery, but nothing connecting them at scale. Every term, an instructional design team spent ~600 hours doing the same manual loop: confirm a recording finished, find the right Panopto folder, name the recording correctly, set captions and access, post a link in the right Canvas module, then chase down the lectures that didn't record at all.

The failure modes were frustrating and predictable. Recordings published to the wrong section. Captions delayed by days. Late-semester rooms with broken capture devices that nobody noticed until students complained. And no audit trail — when a student asked "why was last Thursday's lecture missing?" nobody could give a confident answer. The institution wanted the team's 600 hours back, the failure modes caught the moment they happened, and a system that could scale to twice the current room count without adding headcount.

Our solution

We built an end-to-end orchestration layer in Python and FastAPI that listens to Canvas course events and Panopto recording events, joins them through a local catalog model that knows about courses, sections, rooms, and instructors, and drives the full publish workflow automatically.

The local catalog is the key idea. Instead of asking Canvas and Panopto the same questions over and over, we maintain a small, authoritative PostgreSQL catalog of courses, sections, room-to-section mappings, instructor-to-section ownership, and the publishing rules each department has chosen. Canvas Live Events and Panopto webhooks update the catalog in near real time; a FastAPI orchestration service then drives every downstream action: file the recording in the right Panopto folder, request captions, set access by section roster, post the lecture into the right Canvas module, and write a structured audit event for every step.

Intelligent filtering catches the failure modes that used to be invisible. If a scheduled lecture has no recording within 15 minutes of class end, the system pages the instructional support team and opens a tracked incident. If captions are still missing after the SLA window, it escalates. Every single publish action — successful or not — is logged with who, what, when, why, and the upstream events that triggered it, so the question "why was last Thursday missing?" now has an answer in 30 seconds.

  • Local catalog of courses, sections, rooms, instructors, and per-department publishing rules
  • Canvas Live Events + Panopto webhook ingestion through an inbox-pattern receiver
  • Idempotent per-recording state machine: detected → filed → captioned → posted → audited
  • Intelligent missing-recording detection with 15-minute SLA and tracked incident creation
  • Caption SLA monitoring with automatic escalation when the window is missed
  • Per-section roster-aware access control applied to Panopto folders and Canvas posts
  • Replay tool to re-run the publish workflow for any historical recording end-to-end
  • Structured audit log answering 'why is this lecture missing?' in 30 seconds
  • Admin UI for instructional design team to edit publishing rules without an engineer

How we built it

  1. 01

    Mapping the manual workflow honestly

    We shadowed the instructional design team for two weeks to document every click of the existing manual process — including the parts they didn't think to mention because they were so habitual. The audit produced a 47-step workflow per recording, of which 41 steps were rule-based and could be safely automated, and 6 needed human judgment (and would stay manual).

  2. 02

    Designing the local catalog and event model

    We designed a PostgreSQL catalog that holds courses, sections, room-to-section mappings, instructor ownership, and per-department publishing rules. The schema was deliberately small and aggressively normalized so the publishing logic stayed readable. Canvas Live Events and Panopto webhooks became the only inputs that change catalog state.

  3. 03

    Building the FastAPI orchestration service

    The orchestration service is a Python/FastAPI app with Celery workers and an idempotent state machine per recording: detected, filed, captioning-requested, captioned, access-applied, posted-to-canvas, audit-complete. Each transition is a separate, retryable step with structured logs and dead-letter handling. The whole pipeline can replay any past recording end-to-end on demand.

  4. 04

    Pilot, scale, and continuous improvement

    We piloted with one academic department for an entire term, comparing automated outputs to the manual baseline weekly. After zero divergence over 12 weeks, we rolled the platform out department by department over the following term. The instructional design team kept ownership of publishing rules — they can edit the catalog and rule definitions through a small admin UI without an engineer in the loop.

Tech stack

  • Python
  • FastAPI
  • Canvas LMS API
  • Panopto REST API
  • PostgreSQL
  • Celery
  • Redis
  • AWS S3
  • AWS EventBridge
  • Datadog
  • API & Systems Integration
  • Python & FastAPI
  • Workflow Automation
  • Cloud Solutions
Our team got 600 hours per term back, our students get their lectures the same day, and when something does go wrong we know about it before the first email lands. It changed what we can offer instructors at this institution.
Director of Instructional Design · Higher-ed institution (name confidential)

Frequently asked questions

How do you reliably automate the Canvas + Panopto lecture-capture workflow?

Don't try to drive Canvas and Panopto directly from rules — that gets brittle fast. Instead, maintain a small local catalog of courses, sections, rooms, and instructors that gets updated by Canvas Live Events and Panopto webhooks. Then run an idempotent state machine per recording that drives every downstream action against the catalog. The catalog becomes the single source of truth and the rest of the system is a thin, replayable orchestrator.

How do you detect lectures that should have recorded but didn't?

Compare scheduled class events from your room-to-section mapping against received Panopto recording events on a 15-minute SLA. If a scheduled session has no associated recording, page the instructional support team and open a tracked incident with the room, section, instructor, and the upstream events that were (and weren't) seen. This is the single highest-value automation in the platform.

Can the Panopto API handle production-scale orchestration?

Yes — the Panopto REST API is well documented and stable for the operations that matter (folder creation, recording upload metadata, access control, captioning workflow). The reliability question is on your side: idempotent calls, exponential retry, and a per-recording state machine so you can replay any failed step without coordination. We treat Panopto exactly the way we treat any third-party API in a production integration.

How do you keep instructional design teams in control of publishing rules without involving engineering?

Move the rules out of code and into the catalog. We give the team a small admin UI on top of the PostgreSQL rules tables — what gets posted to which Canvas module, what access policy each department wants, what the caption SLA is. Engineering owns the orchestrator; the team owns the rules. Rule changes never need a deploy.

What does an end-to-end Canvas + Panopto automation project typically cost and take?

16-26 weeks for a production-grade rollout at a mid-to-large institution. The first 4-6 weeks are workflow discovery and catalog design — getting that right is what makes the rest cheap. Once a department is on the platform, adding subsequent departments takes days, not weeks.

Want a result like this?

Talk to the same team that built End-to-End Automated Lecture Capture: Canvas + Panopto + Python Orchestration. We’ll scope your project, give you a fixed-price proposal, and show you the closest analog from our portfolio.

Book a strategy call