This repository contains a Python utility that sorts classroom recording files into semester/course folders and can optionally upload them to Kaltura before moving them.
If you are taking the project over, start here:
The sorter depends on three local inputs:
config.iniin the repo root- a schedule spreadsheet matching the expected column names
- recording filenames that match one of the supported parser formats
For Upload mode it also needs a repo-root .env file with Kaltura credentials.
python3 -m venv .venv.venv/bin/python -m pip install -r requirements.txtNote: the current requirements.txt file is UTF-16LE encoded.
Use config-EXAMPLE.ini as a reference, but do not copy the inline comments on the same line as values. With the current Python ConfigParser usage, those inline comments become part of the value.
kaltura_uploader.py expects:
PARTNER_IDTOKENTOKEN_ID
These values should stay local and never be committed.
.venv/bin/python video_sorter.pyThe app processes immediately on first launch, then continues running and checks again when the local time reaches 3 AM.
Run:
.venv/bin/python -m pytest -qThe tests depend on:
test_courses.xlsx- the folder structure configured by
[Paths].test_folder
Status verified locally on April 21, 2026:
- 17 tests passed
- 1 test failed because it hard-codes a Windows-style path expectation and does not pass on macOS/Linux
The repo includes video_sorter.spec.
Build with:
.venv/bin/pyinstaller video_sorter.specThe current importer expects columns including:
CourseSection #Course TitleMeeting PatternInstructor LASTRoom (cleaned)Instructor
Operational notes:
Room (cleaned)should contain the bare room numberMeeting Patternneeds to contain recognizable day/time textInstructoris parsed using a strictLAST, FIRST (00123456)pattern
The active parser pipeline supports:
- Extron filenames with room/date/time information
- Extron 2100 filenames
- CaptureCast filenames with course/section/date information
Details and examples live in docs/DEEP_DIVE.md.
- Support unscheduled/manual recordings that start with one or more uNIDs
- Make config examples safer and more copy-pasteable
- Reduce Windows-only assumptions in tests and docs
- Make spreadsheet and instructor parsing more defensive