MilkDrop Unleashed Guide

From Winamp Developer Wiki
Jump to: navigation, search

Breadcrumb -- Wiki Main : Skin Developer : Visual Developer : Plug-in Developer : Articles Page : FAQ : Glossary


MilkDrop 2 comes with Winamp. To install it, just download and install the latest version of Winamp. During the installation, make sure the "MilkDrop" visualizer option is checked, so that it gets installed, too.

Once Winamp is installed, launch it. Load some music files into your playlist and start playing some music. (Be sure to play some music before trying to launch the visualizer - otherwise you'll just see a black screen.)

Once music is playing, hit CTRL+K and a list of visualization plug-ins will appear. Select "MilkDrop 2" from the list. Then click the "Start" button, and it will launch the visualizer.

   Quick Tips:    
     * If you want to go full-screen, double-click on the visualizer itself.
     * CTRL+SHIFT+K starts or stops the visualizer.
     * To configure MilkDrop's options, exit the visualizer and hit ALT+K.
   If you have trouble getting MilkDrop to run properly after installation, 
   try installing various recent WHQL drivers for your video card, or installing 
   DirectX; doing these two things (especially the first) will fix 99% of
   problems. See the Troubleshooting section of the documentation for more

Tweaking to achieve best image quality

a) Fullscreen Display Mode [first tab of config screen]

When you run MilkDrop fullscreen, it changes the display mode to whatever you select here. Generally speaking, the speed (framerate) and smoothness of MilkDrop will drop as the resolution (number of pixels on the screen)increases. So, if it's running to slow in fullscreen mode, try selecting a smaller fullscreen display mode.

b) Canvas Stretch [second tab]

This option lets you trade resolution [crispness] for speed. If MilkDrop runs too slow, in any mode (windowed/fullscreen/desktop), try cranking up the canvas stretch to, say, 1.5X or 2X. The image will not look as crisp, but MilkDrop will probably run much faster. (Assuming that your graphics chip was the bottleneck.)

c) Mesh Size [second tab]

This is the main option that affects how much processor (CPU) MilkDrop uses. If you crank it up far beyond the default, expect to be CPU-bound (where your framerate drops because the CPU is the bottleneck). To get MilkDrop to speed up, drop the Mesh Size back down. The Mesh Size decides how many points on the screen the per-vertex equations will be executed for; the higher the mesh size, the more fidelity you will see in the motion.

d) Tips for LCD and laptop users

LCD screens: Note that most LCD screens (flatpanels) usually run at a fixed frequency only - usually 60 Hz - meaning that they update the screen 60 times per second. However, sometimes the video driver reports that it supports other refresh rates, such as 72, 75, 85, etc. It is strongly recommended that [for fullscreen mode, and for Windows in general] you choose a display mode with a 60 Hz refresh rate, for the smoothest possible animation. For this plugin, you will also want to choose Maximum Framerates that divide evenly into 60 - such as 60, 30, 20, 15, 12, 10, 6, 5, and so on - so that the # of times the LCD shows each frame of animation remains constant, resulting in the smoothest possible animation.

e) color (bit) depth: 16 or 32?

The answer, nowadays, is a resounding "32". Video memory is plentiful these days; use 32 bit color, for both your windows desktop ( that MilkDrop's windowed mode can run at 32 bits) and for MilkDrop's Fullscreen Display Mode setting (where "8888" denotes 32 bits). Some ancient video cards don't have enough memory to run MilkDrop properly (or smoothly) in 32 bits, though; you might want to try 16-bit color if your card has less than 32 MB of video memory, if you are using a laptop, or if your video card is significantly old. In the MilkDrop config panel, 16-bit modes show up as "555" or "565".

If you find that your card runs best in 32-bit color, you should have no problems with brightness levels while running MilkDrop. However, if your card runs best in 16-bit color, you should then adjust the Brightness slider on the second tab of the config panel (which only affects 16-bit color video modes!). The goal is to make the image as bright as possible, without oversaturating it (washing it out, often to bright pink or white). This setting also varies for different cards, depending on how the card rounds color values, so we recommend seeing how bright you can set the slider closer to '0') without oversaturating the image. Usually,a setting of '0' or '2' works the best.


4.a. Keyboard Commands

The following keys can be used to control MilkDrop while it is running. (Note: pressing F1 while MilkDrop is running will show you this list)


escape: exit to winamp


BACKSPACE: return to previous preset
SPACE: transition to next preset
H: instant Hard cut (to next preset)
R: toggle random (vs. sequential) preset traversal
L: load a specific preset (invokes the 'Load' menu)
+/-: rate current preset (better/worse)
scroll lock: lock/unlock current preset 
  (keyboard light on means preset is locked)
  (prevents random switch to new preset)
A: aggregate preset - loads a random preset,
   steals the warp shader from a different random preset,
   and steals the composite shader from a third random preset.
D: cycle between various lock-states for the warp and
   composite shaders.  When one of these shaders is locked,

loading a new preset will load everything *except* the locked shaders, creating a mix between the two presets.


M: show/hide the preset-editing menu
S: save new preset (asks you for the new filename)
N: show per-frame variable moNitor

(see MilkDrop Preset Authoring)


z/x/c/v/b: navigate playlist (prev/play/pause/stop/next)
U: toggle shuffle
P: show playlist
up/down arrows: volume up/down
left/right arrows: rewind/ffwd 5 seconds
SHIFT + left/right arrows: rewind/ffwd 30 seconds


F1: show help screen
F2: show song title
F3: show song length
F4: show preset name
F5: show fps (frames per second)
F6: show rating of current preset
F7: re-read custom message file (milk_msg.ini) from disk
F8: jump to new directory (for presets)
F9: toggle stereo 3D on/off


T: launch song title animation
Y: enter custom message mode
##: load message ## (where ## is a 2-digit numeric code (00-99) 
of a message defined in milk_msg.ini)
*: clear any digits entered.

DELETE: clear message (if visible)

F7: re-read milk_msg.ini from disk
K: enter sprite mode
##: load sprite ## (where ## is a 2-digit numeric code (00-99) 
    of a sprite defined in milk_img.ini)
*: clear any digits entered.
DELETE: clear newest sprite 
SHIFT + DELETE: clear oldest sprite
CTRL+SHIFT+DELETE: clear all sprites
F7: no effect (milk_img.ini is never cached)
SHIFT + K: enter sprite kill mode
##: clear all sprites with code ##
*: clear any digits entered.
CTRL + T/Y: kill song title and/or any custom messages
CTRL + K: kill all sprites

Note that there are more keys available, but because many are only relevant to people designing their own presets, they are listed in the preset authoring guide instead.

4.b. config panel

The configuration panel lets you customize the way MilkDrop runs. To learn how to get to the configuration panel, see the "Installation" section above.

Once you're in the config panel, you'll see a number of tabs at the top, some dropdown boxes, and some checkboxes. Each of the tabs at the top brings you to a different page of configuration options. To get help on a setting, simply click on the '?' in the upper-right corner of the config panel, and then click on the setting you want help with.

4.c. preset authoring

Please check the MilkDrop Preset Authoring guide for instructions on how to create and save your own presets.

4.d. rating system

The built-in rating system allows you to rate each preset on a scale from 0 to 5. A rating of 5 is very good, while a rating of 0 is the worst. The ratings decide how often the presets will be randomly loaded. If a preset has a rating of 0, it will never be randomly loaded (unless they're all zero; then they all have an equal chance).

To show the rating for a preset, press F6. You can adjust the rating for a preset with the +/- keys. When you make adjustments, they save automatically; there's no need to save the preset to make the rating change permanent.

Here's a recommended interpretation of the numeric values:

           0 = I never want to see this preset again
           1 = very ugly
           2 = mediocre
           3 = fair
           4 = good
           5 = downright stimulating

If a preset seems "lost" because you set its rating to 0 and it won't ever come back, you can always load it up by hitting 'L' to conjure the 'Load Preset' menu, finding the preset you want, loading it, then hitting +.

4.e. custom messages

ABOUT CUSTOM MESSAGES: The "Custom Message" feature of MilkDrop allows you to display short text messages on the screen while MilkDrop is running. They are highly configurable; you can set all of the following parameters: the font, the size, the positioning, color, bold state, italic state, and so on; and you can even have it randomize some of these properties.

CREATING THE MESSAGES: You can save up to 100 messages in the file MILK_MSG.INI in your Winamp\Plugins\ folder. To open this file, go to the MilkDrop configuration screen (ALT+K from Winamp) and click the "Edit Custom Messages" button. Or, you can just edit it manually if you know how; it's plain-text.

The first thing you see when you open the file is a bunch of lines that start with two forward slashes (//). These are comment lines, and they explain the syntax for adding a font or a message to the file. This is your main reference for finding out what all the parameters do for the fonts & messages; it is recommended that you leave this information in the file, although it can be removed or (modified) and the messages will still work.

After the comments come first the fonts, then the messages. The fonts are simply a way to specify a typeface, bold state, italics state, and red/green/blue color for the font. You can configure up to 16 fonts like this (numbered 00-15). These fonts will serve as template fonts for the custom messages.

The next section is the actual messages. Each one has a text message (the 'text' parameter) that will be shown to the user, and each one references one of the 16 fonts that were defined in the previous section. You can also specify the size (size), position (x,y), a growth factor (growth) that will grow/shrink the message over its lifetime, the number of seconds to show the message (time), and the fraction of that time that is spent fading in (fade).

You can also randomize some of these values: 'randx' and 'randy' will randomly perturb the (x,y) coordinates every time the message is shown to the user, and 'randr'/'randg'/'randb' will randomly perturb the (r,g,b) color in the same way.

Finally, you can override any of the default properties for the font that this message uses: (face, bold, ital, r, g, b).

INVOCATION AND USAGE: There are two ways to invoke custom messages: one automatic, the other manual.

The automatic way is to go to the MilkDrop config panel (ALT+K), click the 'More Options' button, and set the value in the 'Time between RANDOM custom messages' box to something greater than zero. This will cause MilkDrop to randomly display custom messages while it is running, and the average time (in seconds) between messages will be the value you entered here. If you wish to disable random custom messages, set this value to -1 (or any negative number). Note that all messages in the file have an equal change of being picked.

The manual way is to type in the two-digit code (00-99) of the message while MilkDrop is running. However, you can't use the numeric keypad for this - you have to use the numbers at the TOP of your keyboard to do it. If you mess up while entering the first digit, just press the '*' key to start over.

Note that if you change the MILK_MSG.INI file while MilkDrop is running, you will not be able to see the changes until you hit F7, which tells MilkDrop to re-read the MILK_MSG.INI file from disk.

4.f. sprites

ABOUT SPRITES: The "Sprite" feature of MilkDrop allows you to display any image of your choice in the foreground (on top of MilkDrop) while it runs. The sprites can fade in and out, move around, respond to the music, and so on. You define them in a file - milk_img.ini in your winamp\plugins directory - much like you define custom messages, each having an identifying code number from 00 through 99 (used to invoke them). However, the way the individual sprites are defined is different; you write code for them, instead of just setting parameter values. This is a little bit tougher to do (it's very much like preset authoring), but adds a great deal of flexibility to what you can do with the sprites.


You can define up to 100 sprites in the file MILK_IMG.INI in your Winamp\Plugins\ folder. To open this file, go to the MilkDrop configuration screen (ALT+K from Winamp) and click the "Edit Sprites" button. Or, you can just edit it manually if you know how; it's plain-text.

The first thing you see when you open the file is a bunch of lines that start with two forward slashes (//). These are comment lines, and they explain the syntax for creating a sprite. This is your main reference for finding out what all the parameters do for the fonts & messages; it is recommended that you leave this information in the file, although it can be removed (or modified) and the sprites will still work.

After the comments come the sprite definitions. Each sprite is made up of one parameter that indicates the image file to use (this is the 'img=...' line), and two types of code: initialization code, and regular code.

The first - initialization code - is executed only once, when you launch the sprite. Use it to do one-time initialization of variables (such as the opacity (a), rotation angle (rot), position (x,y), and so on) or to invent new variables that you will access later. This code is marked by the 'init_1=...', 'init_2=...', etc. lines. The second type of code - marked by 'code_1=...', 'code_2=...', etc. is executed every frame, just prior to plastering the sprite on the screen. Use it to animate the sprite, moving it around (changing x,y), scaling it up and down (sx,sy), fading it in and out (a), changing its color, and so on.

           Please see the comments included in the sample milk_img.ini file
           for full details and examples on how to author sprites.

INVOCATION AND USAGE: There is currently only one way to invoke sprites: manually. To do this, first press 'K' to enter 'sprite mode' (while running MilkDrop). Now, whenever you type in a two-digit code (00-99), MilkDrop will try to find & launch the sprite you've requested, from the milk_img.ini file. If there is an error, it will display an error message in the upper-right corner. Note that to enter the two-digit code, you can't use the numeric keypad; you have to use the numbers at the TOP of your keyboard.

If you make an error entering the first digit of the code, just press '*' to start over. If you want to clear the most recently-invoked sprite, press DELETE. If you want to clear the oldest sprite, press SHIFT + DELETE. If you want to clear all sprites, press SHIFT + CTRL + DELETE.

If you want to clear sprites by their 2-digit code, press SHIFT + K (instead of just 'K') to enter 'sprite kill mode.' Now, when you enter a two-digit code, instead of invoking the sprite, MilkDrop clears all running sprites with that two-digit code.

Trouble Shooting

If MilkDrop has a critical problem (e.g. fails to load, freezes, etc.)or if the image is distorted, torn, corrupted, or all one solid color, try the following two suggestions to resolve the problem. In 90% of these cases it can be fixed. If you have a different problem, scroll down past this part and try to find the appropriate symptom and its solution.


Almost all display problems are caused by buggy video drivers! A "driver" is a piece of software that translates graphics-related commands from programs, like MilkDrop, into the native language of your specific graphics hardware.

For desktop machines, there are typically three sources for video drivers:

  1. those from the *chip* manufacturer's website (usually or (best source)
  2. those from the card manufacturer's website (LeadTEK, PNY, etc.)
  3. those that shipped with Windows (yuck)

For laptops:

  1. the driver from the *laptop* manufacturer
  2. (maybe) the driver from the graphics chip manufacturer (ATI, Nvidia, etc) - however, it's fairly common to find that the laptop requires a custom driver written by the laptop manufacturer.
  3. the driver that shipped with Windows (yuck)

Give them all a shot. Track down every driver you can find for your card, and try it. Try the WHQL ones first - these versions of the drivers have passed "Windows Hardware Quality Labs" certification and are usually the more stable and reliable ones. In general, it's a very good idea to use only Microsoft-certified WHQL drivers for your video card. Often people want to get the newest, fastest beta drivers, but these drivers are almost ALWAYS riddled with new bugs. You can also watch the version number of the drivers a company releases - if the version number just jumped to a new series such as from the 70's to the 80's), watch out, it probably has a lot of bugs that need worked out - give it 3-4 months before expecting the new driver series to work well. With video drivers, the newest isn't always the best!

Here is a list of some common card/chip manufacturers and where to get their drivers. Don't forget to choose the WHQL driver!

           NVIDIA driver
               Card manufacturers using NVIDIA (GeForce) graphics chips:
               (note - most of these just link you to the nvidia driver above)
           ATI driver 
               Card manufacturers using ATI (Radeon) graphics chips:
           Intel - then click 'graphics' on the left
           SiS - agree, then select 'graphics drivers'
           S3 - then click 'drivers'
           Creative Labs

For others - or in general - if your graphics chip is made by Trident, for example, then try a google search for:

               Trident graphics driver

Then click on "support", then "drivers" (or "downloads"), then "graphics driver", and so on.


Make sure you have a quasi-recent version of Microsoft DirectX installed. In reality, though, almost every PC in the world has DirectX 9 on it at this point, so this shouldn't be a problem. If you go to download it, you'll only be able to find DirectX 10 - this is fine to install, though, as it includes DirectX 9 inside it. As a last resort, though, if you are having problems, you could try re-installing DirectX to see if it helps.

If you're having a non-critical problem, browse the following list of common problems and their causes and solutions. Note that for each symptom- cause-solution block, there can be multiple symptoms with the same cause and solution, and the same symptom might be listed in multiple blocks.

If the solutions below don't work for you, please visit the forums at, where you can read the most recent troubleshooting issues and solutions.

   ENTRY 1
       -any error message saying "Failed to create ..." 
           or "not enough memory...", or
       -only a portion of the screen displays correctly; the rest is 
           either filled with garbage or badly flickering
       1) Your video card might not have enough memory to run MilkDrop at 
       the resolution (screen width and height) you've picked, 
       2) your drivers might be out of date, 
       3) you might need to reinstall DirectX (very very rare), or
       4) your graphics card might be to crappy to *actually* run
            pixel shaders well.
       1) To battle video memory problems:
           Go to the config panel and try smaller video modes (e.g.,
           320x240 is smaller than 640x480).  Even better is to try
           a lower color bit depth; if you'd selected a 32-bit ("8888") 
           video mode before, try a 16- ("565" or "555") or 24-bit ("888") 
           one, for example.  Note that it might only work in one of them; 
           so make sure you try them all.  Trying these things is especially 
           important on laptops with limited video memory, or older video 
           cards with a small amount of video memory.
           Finally, you can try locking the texture size (or "canvas size") 
           to 256x256 pixels, just to see if that fixes the problem.  
           If it does, try using a smaller fullscreen video mode to
           free up some memory, or if running windowed, close other
           graphics-hungry applications.
       2,3) for instructions on how to reinstall DirectX or update 
           drivers, go here.
       4) Go to the MilkDrop config panel (hit ALT+K) and on the second tab, 
           in the "Pixel Shaders" box, select "None."  Now does MilkDrop run 
           ok?  If so, your video card probably just can't reliably run
           pixel shaders, due to either inferior hardware, or it could
           be the driver.  You can always try setting "Pixel Shaders" 
           back to "Auto" and then installing a newer (preferably WHQL) 
           video driver.

   ENTRY 2
       -When I go to the Load Preset menu ('L') in MilkDrop, some of the
           presets on disk are missing.
       -I downloaded some new presets and put them in my Plugins\MilkDrop2\Presets
           directory, but I can't access them from within MilkDrop.
       You probably have an older video card that can't handle the pixel
       shaders needed to run some of the presets.  MilkDrop automatically
       hides any presets from you that you can't run.
       * You could b uy a new graphics card - one that meets the minimum
       recommendation for MilkDrop 2.  These cost less than $40.
       * You could try forcing MilkDrop to try to run these presets.
       Sometimes MilkDrop just hides them from you because it predicts
       they will run horribly slow on your graphics card; in case it
       is wrong about that, try this.  Go into the MilkDrop config
       panel (ALT+K) and go to the More Settings tab.  Under the 
       "Pixel Shaders" option, change it from "Auto" to "Shader Model 2"
       or "Shader Model 3".  Then try to run MilkDrop and see if the
       presets appear.  If they do, you're in luck; if they don't, your
       GPU really doesn't support those shader models.
   ENTRY 3
       MilkDrop always looks the same - it's always showing the same
       preset, and it never changes to a new preset unless I tell it to.
       Scroll Lock is on.
       The Scroll Lock key is how you tell MilkDrop to lock the current
       preset - i.e. don't randomly transition to a new preset unless you 
       do it.  The state of the Scroll Lock key is remembered when you
       start or stop MilkDrop, too, so be careful of that.  If you are
       experiencing this problem, you can fix it in any of the following
       three ways:
         1. hit Scroll Lock while MilkDrop is running (and the viz window is active);
         2. load up the MilkDrop config panel (ALT+K), go to the More Settings
             tab, and uncheck the "Start milkdrop with preset lock (scroll lock) 
             key ON" box;
         3. if you're using a modern skin, there is a "random" button on
             the frame of the window, which is the inverse of the Scroll Lock
             state - i.e. you probably have Scroll Lock on and "random" off.
             Click the "Random" button to turn random transitions back on
             (and notice that scroll lock gets turned off as a result).
   ENTRY 4
       I was browsing for presets from within MilkDrop ('L') key and 
       got lost.  How do I get back to my presets?
       Two ways to fix this.  The easiest is to just reset MilkDrop
       to its defaults - hit ALT+K to load the MilkDrop config panel,
       then click the 'Defaults' button.  The next time you launch
       MilkDrop, it will start you in the default preset directory.
       To fix it manually (and preserve all your settings), run
       MilkDrop, hit F8, and paste in this path:
         C:\Program Files\Winamp\Plugins\Milkdrop2\presets
       [or equivalent].
       Another way to fix it is to hit 'L', and browse all the way 
       down to the root folder (repeatedly select ".."), then
       go into Program Files, Winamp, Plugins, MilkDrop2, and finally,
   ENTRY 5
       -things flicker through (such as my AIM window ticker, taskbar
       clock, web page animations, etc.) when I'm running MilkDrop
       in fullscreen mode.
       You're probably running MilkDrop fullscreen at the same
       resolution & color depth as your desktop, and Windows isn't 
       properly handling MilkDrop's request for exclusive access to the
       screen, and is still letting other applications paint (draw)
       Change either your Windows desktop resolution or color depth, or 
       MilkDrop's fullscreen resolution or color depth, so that there
       is some difference between the two.   (To change your Windows 
       display settings, go to the Start Menu -> Settings -> Control 
       Panel -> Display -> Settings tab, and then change the "colors" 
       or "screen area" settings from there.)  Also make sure you're
       not using "fake" fullscreen mode (...uncheck this box on the
       main screen of the config panel).

Known Issues / Misc. / Tips:

   a. Tip for video capture: if you'd like to save sequences of video 
       from this plugin, there are several programs out there that will 
       let you do this.  Warning: you will need a ton of free hard drive 
       space, and a fast CPU helps.  A few of these programs are:
   b. Close other apps:
       For the best graphics performance, try to close as many other 
       applications as you can, before running the plugin, especially 
       those that tend to work in the background, such as anti-virus 
       or file-swapping software.  Also, if you must leave other 
       applications open, try to minimize them (i.e. shrink the window 
       down to the taskbar) so that they stay out of the painting loop.
   c. Windows Vista / Winamp with per-user settings
       Be aware that if you're running Vista as a non-admin user,
       you can't write to (or delete from) files in the Program Files
       directory, which is were MilkDrop 2 is installed.  So, anything
       you try to write or save (like milkdrop's settings file, milk2.ini; 
       or presets) will probably end up deep in some user-specific, 
       virtualized "Program Files" directory somewhere on your hard 
       drive.  Yell at Microsoft for this one!
       Also, if you installed Winamp with per-user settings (instead of 
       shared settings) - on any OS, not just Vista - be aware that your
       .INI files (milk2.ini, milk2_img.ini, milk2_cfg.ini) are all
       stored in a folder like this:
           C:\Documents and Settings\\Application Data\Winamp\Plugins         
       (Note that 'Application Data' is a hidden folder.)  However,
       presets, textures, and things like that are all shared between
       users, in the real [c:\Program Files]\winamp\plugins\milkdrop2 folder. 
       If you want to keep your presets separate, you can still do that, 
       though - just put them in a personal folder, and then seek to it
       from within MilkDrop.  If you're using per-user settings in Winamp,
       it will remember which folder you last used.

Using Line-In

   If you want to use your sound card's Line-In or CD Audio inputs for
   sound data (instead of mp3 files), you can do this.  Do the following:
           Connect your audio source (a stereo, a live feed, whatever) into
           the line-in (or microphone) 1/8" jack on your sound card.  You
           might want to test & verify that your cable is good before doing 
           In Windows, double-click the speaker icon in your systray (where
           the clock is).  Then, on the menu, go to Options -> Properties
           and select the "Recording" option.  Then make sure the Line In
           (or Microphone) input channel (whichever is appropriate for
           your case) is SELECTED (with a check mark) and that the volume 
           is close to, or at, the maximum.  Hit OK.           
           Open Winamp, and hit CTRL+L (the "Open Location" hotkey).  Now
           type in "linein://" as the location you want to open.  (Leave out
           the quotes and make sure you use FORWARD slashes.)  Hit PLAY
           ('x' key for the lazy), and the little built-in oscilloscope (or 
           spectrum analyzer) in Winamp should start showing your signal.
       4. RUN MILKDROP
           Run MilkDrop as usual.  If the waves are too small or large, 
           either adjust the volume from Windows' Volume Control, or adjust
           the sound level at the source.       
   If you are doing shows using live audio, and if you have a multiple monitor
   setup, you might also want to use the "VJ mode" feature, which lets you 
   control MilkDrop (even editing shaders on the fly, etc.) via a separate monitor.