Repository navigation
MilkDrop: import from ZIP archives, and find libraries already on the machine #574
Description
Activity
- addedenhancementNew feature or requestNew feature or requestmilkdropMilkDrop preset engineMilkDrop preset enginelibraryPresets, packs, templates, browserPresets, packs, templates, browser
on Sep 18, 2026 - added a commit that references this issue
on Sep 22, 2026 Part 1 of 2 is on
mainvia #606 (dcd0969, 42bf7f1): the preset store now scales to a full library, so the importer (part 2) can bring one in without an artificial cap.Measured in an isolated copy with 10,347 MilkDrop presets (116 MB):
Before After presets:list3.8 s 0.3 s One save (window open) ~2.4 s main-process hold 91 ms Panel memory 631 MB 273 MB Web client on connect (2,000 presets) ~30 MB 271 KB - Presets are read once, in the background at start-up. A save or delete sends only what changed.
- Web clients get MilkDrop presets without sources; the overlay fetches a preset's source by id when it is about to draw it.
- Found on the way: importing or deleting a MilkDrop preset no longer restarts the MilkDrop picture in the visualizer window.
Part 2 (ZIP import, folder import, textures, finding existing libraries) is next.
- added a commit that references this issue
on Sep 22, 2026 Part 2 of 2 is on
mainvia #607 (6573792, f992e14): the importer.- 🗜 Import from ZIP Pack, 📁 Import from Folder and 🔎 Search This Computer in the MilkDrop panel. A scan shows what will be added: presets, textures, MB, and what will be skipped. Nothing is copied until the user confirms.
- Nested folders are included, and so are the pack's textures. Textures are copied into the app's own folder and looked up after the user's texture folder. Every engine picks them up, the web overlay included.
- The pack's category folders can become tags (MilkDrop: favourites, tags and search by author #576).
- Duplicates (same name and same content) are skipped.
.milk2files, oversized files and encrypted ZIP entries are reported. - The search looks in the Winamp, foobar2000 and projectM folders, and in Downloads, Desktop, Music and Documents wherever the system keeps them. It searches breadth first within an 8-second budget.
- A library the search could not finish counting is listed with "+" and scanned in full before the confirmation, so nothing is imported from a partial scan.
- No preset pack ships with the app.
Measured:
- A 9,795-preset folder was scanned in 1.1 s and imported in 6.2 s. Importing it again added nothing.
- An 80,000-preset folder that the search counted only to 10,013 was listed as "10,013+". The confirmation showed 80,000 after the full scan.
- A web overlay opened before an import loaded the imported texture afterwards, with no texture folder chosen.
Not done:
.milk2(MilkDrop 3 compatibility: an Automatic / MilkDrop 2 / MilkDrop 3 mode #567).- RAR and 7z packs.
- A ZIP inside a ZIP, or inside a chosen folder.
- Drives outside the searched places. Import from Folder reaches those.
29 tests; 57 of 57 mutations caught. Both parts are done. This stays open until the v3.1.5 release.
A data-loss bug that hit large imports, fixed in #658 (main CI green on
4ee1cfddfebe9fd074fcd367976332edb5e13f78).Preset ids were
usr_<time>_<random 0..65535>. A bulk import creates thousands of presets in the same millisecond, so with a library the size of the 10,347-preset case here, two presets almost certainly got the same id. One then overwrote the other's file and library entry (rating, favourite, tags). Main CI caught it inmilkdrop-library.test.js.- Ids are now
<prefix>_<time>_<per-process counter><random>. The same fix went into the main-process store, layer ids and post-FX ids. - A test imports a 20,000-preset pack and expects 20,000 distinct ids. It fails on the old code.
Presets lost this way in earlier imports come back by re-importing the same folder or pack.
- Ids are now
Preset packs travel as ZIP files, and many people already have a library from Winamp, MilkDrop 3, BeatDrop or projectM.
.zipdirectly, nested folders and textures included.