feat(quantic): curs NLP Quantic (curs/34) - audio pentru telefon

- courses.py: curs "quantic" (shop.cursnlp.ro/curs/34, root nlp-quantic/)
- download.py: yt-dlp cu 8 fragmente paralele + fara progress bar
- rename_phone_quantic.py: copii MP3 cu ID3 (titlu, album per modul, track) + coperta
- rename_phone_practitioner.py: font fallback Linux, an pe coperta din YEAR
- nlp-quantic/: coperti M1-M5, pagina index.html pentru descarcare pe telefon, PDF-uri rezumat

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017NC1T6XwMepWVPuGZELZtT
This commit is contained in:
Claude Agent
2026-09-19 17:19:29 +00:00
parent 7ee5c94617
commit e8b44473af
13 changed files with 134 additions and 1 deletions

View File

@@ -49,6 +49,7 @@ def find_font(size: int) -> ImageFont.FreeTypeFont:
"C:/Windows/Fonts/arialbd.ttf",
"C:/Windows/Fonts/arial.ttf",
"C:/Windows/Fonts/segoeui.ttf",
"/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
]
for c in candidates:
if Path(c).exists():
@@ -109,7 +110,7 @@ def make_cover(module_num: int, theme_full: str, out_path: Path) -> Path:
# Course label (small, top)
f_small = find_font(36)
label = COURSE_PREFIX + " - 2024"
label = f"{COURSE_PREFIX} - {YEAR}"
bbox = draw.textbbox((0, 0), label, font=f_small)
draw.text(((size - (bbox[2] - bbox[0])) / 2, 60), label, font=f_small, fill="#ffffff")