Generally for RGB rainbows, you probably want a ramp that loops (i.e. 0->1 and 1 wraps around to 0)
But yes for breathing sine wave is the best evar.
Just going off Theatre lighting console, using cue-based animations:
Colour space - (HSV or RGB)
Lights selected - (single value or "start end range")
Start value - (single value or "start end range")
End Value - (single value or "start end range")
offset value (single value or "start end range")
offset time (single value or "start end range")
Delay (single value or "start-end range") This delays the animation time by this amount. Delay only occurs on first loop.
Speed (animation length)
Ramp type:
here's an example cuelist for a simple spiral animation (lights turn on one at a time and stay on, until 1s, when all lights are on. Then everything turns off and it repeats.)
Cue 1: RGB Light1 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 0 Time (1.0) Ramp Ramp
Cue 2: RGB Light2 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 1/12 Time (1.0) Ramp Ramp
Cue 3: RGB Light3 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 2/12 Time (1.0) Ramp Ramp
Cue 4: RGB Light4 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 3/12 Time (1.0) Ramp Ramp
Cue 5: RGB Light5 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 4/12 Time (1.0) Ramp Ramp
Cue 6: RGB Light6 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 5/12 Time (1.0) Ramp Ramp
Cue 7: RGB Light7 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 6/12 Time (1.0) Ramp Ramp
Cue 8: RGB Light8 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 7/12 Time (1.0) Ramp Ramp
Cue 9: RGB Light9 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 8/12 Time (1.0) Ramp Ramp
Cue 10: RGB Light10 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 912 Time (1.0) Ramp Ramp
Cue 11: RGB Light11 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 10/12 Time (1.0) Ramp Ramp
Cue 12: RGB Light12 StartValue (0,0,0) EndValue (255,255,255), OffsetValue 0, OffsetTime 0.0 Delay 11/12 Time (1.0) Ramp Ramp
Here's an example cuelist for EXACTLY the same animation, done in one cue.
Cue1: RGB (Light1->Light12) StartValue (0,0,0), EndValue(255,255,255), OffsetValue 0, OffsetTime (0->1) Speed (1.0) Ramp Ramp
I reckon with something like this thats decently parameterized you could do 80-90% of user things in 1 cue. Obviously the downside is i they want bitmap style animations parameterized is not the way to go.
Total bytes for this encoding:
Colour space - (HSV or RGB) (1 byte)
Lights selected - (single value or "start end range") (2 byte) (can be reduced to 1 byte with some bitstuffing)
Start value - (single value or "start end range") (6 bytes)
End Value - (single value or "start end range") (6 bytes)
offset value (single value or "start end range") (6 bytes)
offset time (single value or "start end range") (4 bytes)
Delay (single value or "start-end range") This delays the animation time by this amount. Delay only occurs on first loop. (2 bytes)
Time (animation length in seconds) (2 bytes)
Ramp type: (2 bytes)
total bytes per "cue": 31 bytes. I assumed using shorts instead of floats for time.
Using the same 31 bytes you can easily do RGB rainbows (use offset value)
You could enhance selection so you could select alternating/arbitrary LEDs rather than a range, by using a simple bit map. Ordering them for the cue would take more bits though if you aren't just assuming order is lowest LED to highest.
E.g. with 2 cues you could do RGB rainbow on odd LEDS + red pulse on Even LEDS