Speed up music scan by deferring tag reads to import time

Reading embedded ID3/MP4 tags for every file during the scan itself was
taking minutes even for a small (146-track) library, since each mutagen
open is a slow round trip over the CIFS-mounted NAS share. Scan now uses
fast filename/path parsing only; tag reads happen once, only for the
tracks actually selected for import.
This commit is contained in:
Myron Blair
2026-07-26 20:38:09 -05:00
parent 514cbad4ab
commit cf31a14ae1
2 changed files with 24 additions and 17 deletions
+6 -3
View File
@@ -1431,10 +1431,13 @@ async def scan_import(payload: dict, user: dict = Depends(require_admin)):
for it in items:
if await db.tracks.find_one({"storage_path": it["storage_path"]}, {"_id": 1}):
continue
tags = await asyncio.to_thread(library_scan.tags_for_file, it["storage_path"])
track = Track(
title=it.get("title") or "Untitled", artist=it.get("artist") or "Unknown Artist",
album=it.get("album") or "Unknown Album", track_number=it.get("track_number"),
duration_seconds=it.get("duration_seconds") or 0, storage_path=it["storage_path"],
title=tags.get("title") or it.get("title") or "Untitled",
artist=tags.get("artist") or it.get("artist") or "Unknown Artist",
album=tags.get("album") or it.get("album") or "Unknown Album",
track_number=tags.get("track_number") or it.get("track_number"),
duration_seconds=round(tags.get("duration") or 0, 1), storage_path=it["storage_path"],
).model_dump()
await db.tracks.insert_one(track)
created += 1