From 5c918109d53baaeda26c349e17af25db72da7512 Mon Sep 17 00:00:00 2001 From: Mikkeli Matlock Date: Mon, 14 Sep 2026 02:33:28 +0900 Subject: [PATCH] Keep master_core off Qt so the web image starts master_core imported safe_title from font_manager, which imports PyQt5 at module load. The web extra installs no Qt, so `ujm-web` crashed on startup with "No module named 'PyQt5'" inside the container. safe_title is only a UTF-8 round-trip, so master_core now carries its own Qt-free copy; the desktop path keeps using font_manager's. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015UXA39Sh9coAx4FhRkd8R2 --- master_core.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/master_core.py b/master_core.py index e40f4f2..db5a62a 100644 --- a/master_core.py +++ b/master_core.py @@ -7,7 +7,13 @@ import numpy as np from mutagen.mp3 import MP3 from mutagen.easyid3 import EasyID3 -from font_manager import safe_title + +def safe_title(title): + # Deliberately not font_manager.safe_title: that module imports PyQt5 at load + # time, and master_core is on the Qt-free web path (the `web` extra has no Qt). + if not title: + return title + return title.encode('utf-8', errors='replace').decode('utf-8') def _try_mp3_tags(file_path):