Welp, dunno about twice the performance, but it did yield me 10-15% in rows initialization speed and 6.5-7% in total playlist initialization speed, thanks!
Awesome! I meant just the insert to the array was 2x over .push. I'm pleasantly surprised the gains were that big (I didn't have time to test last night). Figured it would definitely be noticeable on 1-2k entry playlists.
Congrats =) But, IMO, you should've added this to PlaylistPanel instead (+ pass the x,y to the PlaylistManager and Playlist ctors).
Adding 'Disc' separator Row (like you did in your theme) won't be that simple though...
Also there is another problem: playlist's bottom part is cropped by the panel in my theme. Since you don't have that you'll have to crop it yourself somehow.
Additionally, FontAwesome is needed for some icons (like the Lock icon above the scrollbar).
Fell free to ask if you have any further questions about the script 
I mistyped. I added it to the PlaylistPanel.on_size, and not Playlist.on_size. I'm nervous about the disc separator, but I'm also determined, so we'll see how it goes 
I solved the cropping problem last night. You were already using a clipImg (which wasn't being clipped
) so I updated Playlist.on_paint to have this code:
if (this.items_to_draw.length) {
var that = this;
_.forEachRight(this.items_to_draw, function (item) {
item.draw(gr, that.y, that.y + that.h);
}, that);
Then I have Header.draw call those two variables top and bottom, and threw this code at the very bottom of Header.draw_normal_header():
clipImg.ReleaseGraphics(grClip);
var y = this.y;
var h = this.h;
var srcY = 0;
if (this.y < top) {
y = top;
h = this.h - (top - this.y);
srcY = this.h - h;
} else if (this.y + this.h > bottom) {
h = bottom - this.y;
}
gr.DrawImage(clipImg, this.x, y, this.w, h, 0, srcY, this.w, h, 0, 255);
clipImg.Dispose();
The individual rows don't draw to a clip image, so no way to clip the top and bottom rows, but your code is already set up to cover up rows if the list has some spacing around it, so I just used that.