I2S method (DmaDriven branch) takes more memory, as it has to have a buffer the DMA is working off and you need a buffer your code is animating too. I will be looking at how this might be streamlined some in the future. This method also is constantly updating the bus (sending) even if you don't call show as fast as it can go (the hardware is setup to do this). Its timing isn't as accurate as the Uart for some reason I don't understand yet. Its consistent but the length of the bit is close to the minimum per spec so it might be sensitive if the crystal on your device is running a little fast; but shouldn't be a big concern as it is within the allowable error per spec. If you have a large collections of pixels or do a lot of animations, make sure to use the NEO_SYNC flag; this will wait until the current Dma send is done before updating the DMA buffer from the working buffer. Sort of like VSYNC with computer monitor graphics.