Alignment Windows fixes:
- config.json read now uses encoding='utf-8' explicitly (avoids cp1252 crash)
- show_progress_bar=False in encode() avoids tqdm pipe-mode issues on Windows
- captions_dir.exists() guard before Path.glob() (Python 3.12 compat)
- get_embedder() wraps model load in try/except with helpful error message
- process_course() prints course/captions dir at startup for easier diagnosis
- All key print() calls have flush=True
Auto-detect wrong recordings:
- After transcription, compute words-per-minute; if < 50 words total or
< 10 wpm → write quality='low' into caption JSON
- process_course() reads quality flag and skips low-quality captions with
a clear [skip] message, preventing wasted embedding + alignment work
- Both local (faster-whisper) and API backends flag low-quality output