Framerate: Right now, I have it set to delay 100ms after every "frame". The entire purpose is to play an "animation", such as a single firework going up and popping or something similar.
Frames: I started with encoding individual pixels. Obviously I leave out pixels that aren't illuminated in that frame, so I'm only specifying ones that are. In the future, I might utilize the GFX library more heavily and encode basic shapes (squares, circles, rectangles, etc). So instead of specifying all pixels in a line, I could just write a custom command for "draw line starting here and going there" which would save a bunch of space as well. Thank you for your input, I definitely need to think more on the encoding scheme and how best represent the data, and I was hoping someone would respond like what you had done.
Animations: They can be custom made, so I have to expect anything. However, like I mentioned above, I could write some code to encode a giant background color as a single command and utilize the GFX library to draw that, instead of specify all 256 pixels be a certain color.
Colors: Nope, I can definitely reduce that down depending on the project requirements. It might be useful to even program that in (choose the number of colors you wish to have) and have it default to Just 16 bits instead of the 24 bits.
Unfortunately, I am kind of stuck with this hardware. I am in a production environment so the hardware chosen was chosen for a reason (cost, licencing, etc). I have talked to them about soldering on a SD card slot to the board depending on what I can achieve with what I have, but that's more down the line. Of course, that would help a ton and would allow me not to even worry about this kind of stuff.
Animations again: Animations are just set on a loop. IE an animation has 10 frames, after frame 10, maybe sleep for 500ms and then start from frame 1 again. I have a shim program running on the computer (not the board) that will capture events. My goal is to have a user interact with the computer, have them trigger some event, and then based on that event play a certain animation. I was also worried about this, since I can't store all the animations on the arduino, they have to be passed through the serial connection to the board to play, so I'm hoping the connection is fast enough so there isn't that much of a noticable "delay" between an event being triggered on the computer and the animation starting on the LEDs. Also, the user is indirectly triggering events, meaning it does not need to be millisecond perfect since they "don't know" the exact moment they are triggering an event. Of course, if the user does something on the system and it takes 5 or 10 seconds, that would probably not be acceptable. But delays of at most I'd say 2 seconds would probably be fine.
If you have any more questions, let me know!! Thank you so much for them.