/Gallery Web demo All effects ← Site

Wind Ribbons

Long banners bend in a steady breeze.

Astra Kinetic · every moving shape in it is evaluated by the rule, not drawn · 256×192 grid · 48-step seamless loop

Wind Ribbons — animated pixel art loop generated in Phluxel
One painted still, one rule, 48 steps. Every frame above came out of the simulation.

The rule that makes it move

This is the whole thing. Phluxel runs it on every cell, every step — the animation is what happens when you repeat it. BASE is the painted scene, so the rule reads the artwork instead of its own output and never smears.

Wind RibbonsPhlux
// Astra scene. _sx/_sy rescale the 256x192 coordinates to any grid size.
PARAM _motion=1
LET _sx = 256/GW
LET _sy = 192/GH
LET _p={FRAC,TICK*_motion/48}
LET _t=_p*6.283185307179586
LET _r=BASE.R
LET _g=BASE.G
LET _b=BASE.B
LET _cx0=70+((Y*_sy-32)/120)*9*{SIN,_t+Y*_sy*.055+0.0}
LET _m1=(Y*_sy>32 & Y*_sy<151+5*{SIN,_t+0} & X*_sx>_cx0-10 & X*_sx<_cx0+10) ? 1 : 0
LET _r1=_m1 ? 190 : _r
LET _g1=_m1 ? 101 : _g
LET _b1=_m1 ? 78 : _b
LET _m2=(Y*_sy>32 & Y*_sy<149+5*{SIN,_t+0} & X*_sx>_cx0-9 & X*_sx<_cx0-7) ? 1 : 0
LET _r2=_m2 ? 231 : _r1
LET _g2=_m2 ? 207 : _g1
LET _b2=_m2 ? 157 : _b1
LET _cx1=106+((Y*_sy-32)/120)*9*{SIN,_t+Y*_sy*.055+0.9}
LET _m3=(Y*_sy>32 & Y*_sy<151+5*{SIN,_t+1} & X*_sx>_cx1-10 & X*_sx<_cx1+10) ? 1 : 0
LET _r3=_m3 ? 209 : _r2
LET _g3=_m3 ? 164 : _g2
LET _b3=_m3 ? 84 : _b2
LET _m4=(Y*_sy>32 & Y*_sy<149+5*{SIN,_t+1} & X*_sx>_cx1-9 & X*_sx<_cx1-7) ? 1 : 0
LET _r4=_m4 ? 231 : _r3
LET _g4=_m4 ? 207 : _g3
LET _b4=_m4 ? 157 : _b3
LET _cx2=142+((Y*_sy-32)/120)*9*{SIN,_t+Y*_sy*.055+1.8}
LET _m5=(Y*_sy>32 & Y*_sy<151+5*{SIN,_t+2} & X*_sx>_cx2-10 & X*_sx<_cx2+10) ? 1 : 0
LET _r5=_m5 ? 115 : _r4
LET _g5=_m5 ? 150 : _g4
LET _b5=_m5 ? 135 : _b4
LET _m6=(Y*_sy>32 & Y*_sy<149+5*{SIN,_t+2} & X*_sx>_cx2-9 & X*_sx<_cx2-7) ? 1 : 0
LET _r6=_m6 ? 231 : _r5
LET _g6=_m6 ? 207 : _g5
LET _b6=_m6 ? 157 : _b5
LET _cx3=178+((Y*_sy-32)/120)*9*{SIN,_t+Y*_sy*.055+2.7}
LET _m7=(Y*_sy>32 & Y*_sy<151+5*{SIN,_t+3} & X*_sx>_cx3-10 & X*_sx<_cx3+10) ? 1 : 0
LET _r7=_m7 ? 99 : _r6
LET _g7=_m7 ? 127 : _g6
LET _b7=_m7 ? 150 : _b6
LET _m8=(Y*_sy>32 & Y*_sy<149+5*{SIN,_t+3} & X*_sx>_cx3-9 & X*_sx<_cx3-7) ? 1 : 0
LET _r8=_m8 ? 231 : _r7
LET _g8=_m8 ? 207 : _g7
LET _b8=_m8 ? 157 : _b7
A=255
R=_r8
G=_g8
B=_b8

The coordinates are written for the 256×192 canvas this was painted on; _sx/_sy rescale them, so the same rule works on a smaller grid too. Download the script ↓

Make it yourself

  1. Open Phluxel, click Browse Starters and pick Wind Ribbons — that loads the painted scene and this rule together.
  2. Press play, then drag the _motion knob while it runs. You never have to stop and restart.
  3. Paint over the scene, or drop the rule on your own artwork — it reads whatever is underneath.
  4. Export a seamless loop as GIF, APNG, MP4, a PNG sequence, or a sprite sheet.

Try it without installing anything

Phluxel runs in the browser as a demo, and the free desktop edition has every feature with a watermark on exports.

Open the browser demo Download free (Windows) Wishlist on Steam

More from Astra Kinetic

Amber LaboratoryBubbles rise through a warm flask. Orbital AtelierA desk orrery swings its planets around the lamp. Courtyard FountainWater arcs from the fountain and falls back into the basin. Analog RotationThe tonearm rides a turning record. All 90 effectsThe complete starter gallery.