an very simple and dirty pixelflut client to draw images, written in bash. pixelfloot was built during the 37c3.
Go to file
Marcus 5d3c9cee26 add https://aaron.cc/the-windows-95-boot-screen-as-an-endlessly-looping-gif/ to images 2024-02-04 00:11:45 +01:00
demo new screenshot, add message for ALPHACOLOR 2024-01-31 02:19:04 +01:00
images add https://aaron.cc/the-windows-95-boot-screen-as-an-endlessly-looping-gif/ to images 2024-02-04 00:11:45 +01:00
README.md support for LARGE ALPHACOLOR was missing, made ALPHACOLOR always upper case 2024-01-31 01:34:56 +01:00
pixelfloot.sh new screenshot, add message for ALPHACOLOR 2024-01-31 02:19:04 +01:00

README.md

./pixelfloot

Origin: https://git.la10cy.net/DeltaLima/pixelfloot

an very simple and dirty pixelflut client to draw images, written in bash. ./pixelfloot.sh was built during the 37c3. in its actual state, its just a mess. I hope i will find time to put it in a more usable and readable format.

examples

  • Display image: ./pixelfloot.sh floot images/lucky-cat.jpg
    • set position: X=1337 Y=420 ./pixelfloot.sh floot images/lucky-cat.jpg
  • image random position: ./pixelfloot.sh floot images/lucky-cat.jpg chaos
    • wider "chaos-radio": X_MAX=1000 Y_MAX=600 ./pixelfloot.sh floot images/lucky-cat.jpg chaos
  • image shake position: ./pixelfloot.sh floot images/lucky-cat.jpg shake
    • set the position : X=420 Y=420 ./pixelfloot.sh floot images/lucky-cat.jpg shake
  • image bounce across screen: ./pixelfloot.sh floot images/lucky-cat.jpg bounce
    • can set the "bounce-radius": X_MAX=1000 Y_MAX=500 ./pixelfloot.sh floot images/lucky-cat.jpg bounce
  • move image with your cursor (needs xdotool): ./pixelfloot.sh floot images/lucky-cat.jpg cursor
  • Use a color as "alpha" (remove background): ALPHACOLOR=FF00FF ./pixelfloot.sh floot images/cursor.ppm cursor
  • write text: TEXT="pixelflut makes a lot of fun! :)" ./pixelfloot.sh floot text
    • set the size of the Textbox and the textcolor: COLOR=FF00FF SIZE=240 TEXT="colors, yeah!" ./pixelfloot.sh floot text
    • you can also use ALPHACOLOR here, or set your: ALPHACOLOR=000000 TEXT="colors, yeah!" ./pixelfloot.sh floot text
    • define your own background color: BGCOLOR=0000FF SIZE=240 TEXT="colors, yeah!" ./pixelfloot.sh floot text
  • increase No of concurrent connections: FLOOTFORKS=8 ./pixelfloot.sh floot images/lucky-cat.jpg
  • specify IP and PORT: IPFLOOT=127.0.0.1 FLOOTPORT=1337 ./pixelfloot.sh floot images/lucky-cat.jpg
  • for drawing big areas, like 1280x720, use LARGE mode: LARGE=true ./pixelfloot.sh floot images/xphg.jpg
    • default field size are 64k lines. You can adjust it with LOLFIELDSIZE: LOLFIELDSIZE=16000 LARGE=true ./pixelfloot.sh floot images/xphg.jpg
  • drawing an gif file with proper animation: ANIMATION=true ./pixelfloot.sh floot images/dancing_banana.gif
    • Adjust the speed with FRAMETICKTIME in seconds: FRAMETICKTIME=0.03 ANIMATION=true ./pixelfloot.sh floot images/shaking_cat.gif
  • with THROTTLE you can adjust your transfer speed: THROTTLE=4M ANIMATION=true ./pixelfloot.sh floot images/Animated-GIFs-davidope-11.gif
    • you can use K, M, G as suffix.
  • view the network io of the worker with PIPEVIEW: PIPEVIEW=true ANIMATION=true ./pixelfloot.sh floot images/Tesseract2.gif

tuning

You can play around with some env vars to optimize your throughput. Most obvious one is FLOOTFORKS whichs defines how many worker fors are spawning / tcp sessions you use. Default is 1.

When using more then one worker, it also worth to have a look to SYNCFLOOTWORKER. This env var (bool) defines if all worker calculate their own OFFSET or use all the same from [worker 1].

You can use PIPEVIEW to see how much bandwith a worker uses. With THROTTLE you can limit the bandwith. Value given in bytes, you can use K, M, G as suffix.

$ ./pixelfloot.sh help
./pixelfloot.sh [floot|convertimg] [FILENAME|fill|text] ([MODE])

floot: flooting the target specified with IPFLOOT
convertimg: converts an image to a command list file in /tmp
            to use it, start 'USECACHE=true ./pixelfloot.sh floot [FILENAME]', where FILENAME
            is the original image file.

FILENAME: path to any picture imagemagick can handle (env X, Y, RESIZE, 
          BORDERCOLOR, ALPHACOLOR)
fill: create a filled area with (env COLOR, W (width), H (height), X, Y)
text: create a textbox (env TEXT, FONTSIZE, SIZE, COLOR, BGCOLOR, BORDERCOLOR
      ALPHACOLOR)

MODE: static (env X and Y for position)
      chaos (env X_MAX and Y_MAX for position range)
      shake (env X and Y for position)
      cursor
      bounce (env Y_MAX and X_MAX for max bounce range, BOUNCESTEP for step size)

available env vars to configure:
IPFLOOT(string), FLOOTPORT(int), USECACHE(bool), FLOOTFORKS(int)
SIZE(int), TEXT(string), FONTSIZE(int), BGCOLOR(hex), COLOR(hex)
BORDERCOLOR(hex), X(int), Y(int), X_MAX(int), Y_MAX(int), H(int), W(int)
RESIZE(int), ALPHACOLOR(hex), BOUNCESTEP(int), LARGE(bool), LOLFIELDSIZE(int)
ANIMATION(bool), FRAMETICKTIME(float), SYNCFLOOTWORKER(bool), THROTTLE(string)
PIPEVIEW(bool), VERBOSE(bool)

Running on my Ryzen 4700G with wellenbrecher 1280x720 and three workers, i get around 1,5Gbit/s localhost traffic.

./pixelfloot screenshot

try it out

you can use my pixelflut server pixelflut.la10cy.net and watch the board on the homepage, every 5s refreshed or connect by VNC to pixelflut.la10cy.net:5900