Index: src/assets/js/mod/playlist-editor.js
===================================================================
--- src/assets/js/mod/playlist-editor.js	(revision b0ccd0d9b11ffb2a364ca71fd3a63aeff057890e)
+++ src/assets/js/mod/playlist-editor.js	(revision 25dd08f3833da4deb81ef7a027a7e4382dbc5181)
@@ -123,4 +123,5 @@
                     <option value="album"    ${initial.kind === 'album' ? 'selected' : ''}>💿 ${T('k_album')}</option>
                     <option value="playlist" ${initial.kind === 'playlist' ? 'selected' : ''}>📃 ${T('k_playlist')}</option>
+                    <option value="mixtape"  ${initial.kind === 'mixtape' ? 'selected' : ''}>📼 ${T('k_mixtape')}</option>
                   </select>
                 </label>
@@ -197,6 +198,9 @@
     // verdwijnen dus als je omschakelt, en de server maakt ze dan ook leeg;
     // dit scherm is de uitleg, niet de bewaking.
+    // ALLEEN een album, en niet "alles behalve playlist". Dat stond er eerst, en
+    // met een derde soort erbij zou een mixtape ineens uitgavevelden tonen die
+    // de server toch weggooit -- een scherm dat iets anders belooft dan het doet.
     const toonUitgave = () => {
-      const album = kindEl.value !== 'playlist';
+      const album = kindEl.value === 'album';
       for (const el of backdrop.querySelectorAll('.pl-uitgave')) el.hidden = !album;
     };
@@ -420,5 +424,9 @@
         year:   parseInt(yearEl.value, 10) || 0,
         cover:  coverEl.value.trim(),
-        kind:   kindEl.value === 'playlist' ? 'playlist' : 'album',
+        // De waarde zelf. Deze regel was `=== 'playlist' ? 'playlist' : 'album'`,
+        // en dat is precies de vorm die een nieuwe soort niet afwijst maar
+        // opslokt: een mixtape werd hier stil een album. De server heeft het
+        // laatste woord via normKind().
+        kind:   kindEl.value,
         release_date:  releaseEl.value.trim(),
         mb_release_id: mbReleaseEl.value.trim(),
