Skip to content

MilkDrop: import from ZIP archives, and find libraries already on the machine #574

Description

@caganturgut

Preset packs travel as ZIP files, and many people already have a library from Winamp, MilkDrop 3, BeatDrop or projectM.

  • Import a .zip directly, nested folders and textures included.
  • Look for existing preset and texture folders in the usual places and offer them with their counts. Nothing is copied without asking, and no preset is shipped with the application.

Activity

  1. added
    enhancementNew feature or request
    milkdropMilkDrop preset engine
    libraryPresets, packs, templates, browser
    on Sep 18, 2026
  2. CaYatur commented on Sep 22, 2026

    @CaYatur
    Owner

    Part 1 of 2 is on main via #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:list 3.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.

  3. added a commit that references this issue on Sep 22, 2026
  4. CaYatur commented on Sep 22, 2026

    @CaYatur
    Owner

    Part 2 of 2 is on main via #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. .milk2 files, 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:

    29 tests; 57 of 57 mutations caught. Both parts are done. This stays open until the v3.1.5 release.

  5. CaYatur commented on Sep 30, 2026

    @CaYatur
    Owner

    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 in milkdrop-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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestlibraryPresets, packs, templates, browsermilkdropMilkDrop preset engine

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions