Index: src/routes/admin-playlists.js
===================================================================
--- src/routes/admin-playlists.js	(revision a95dbfd965659d13d04dc86de36f589ceaab62ed)
+++ src/routes/admin-playlists.js	(revision a29c8c80c88a8dc5fb77c5de84e44c7b69d84a2d)
@@ -23,12 +23,10 @@
 import { requireGod } from '../middleware/auth.js';
 import PlaylistService from '../services/PlaylistService.js';
+import { mediaDir } from '../config/paths.js';
 
 // Cover storage — same convention as track covers so a single physical
 // directory holds all album/track artwork. Existing covers in the DB
 // already point at /media/audio-covers/<filename> so we reuse the path.
-const __dirname = path.dirname(new URL(import.meta.url).pathname);
-const COVER_DIR = path.resolve(
-  process.env.COVER_PATH || path.join(__dirname, '..', '..', 'storage', 'media', 'audio-covers')
-);
+const COVER_DIR = mediaDir('COVER_PATH', 'audio-covers');
 fs.mkdirSync(COVER_DIR, { recursive: true });
 
