{"id":16942492,"url":"https://github.com/defnull/pixelflut","last_synced_at":"2025-08-23T03:13:06.534Z","repository":{"id":3251522,"uuid":"4289358","full_name":"defnull/pixelflut","owner":"defnull","description":"Multiplayer canvas","archived":false,"fork":false,"pushed_at":"2024-03-11T06:56:02.000Z","size":79,"stargazers_count":296,"open_issues_count":11,"forks_count":38,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-02-27T02:54:11.575Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://cccgoe.de/wiki/Pixelflut","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/defnull.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-05-10T20:23:23.000Z","updated_at":"2025-02-22T11:49:25.000Z","dependencies_parsed_at":"2024-10-27T00:58:09.509Z","dependency_job_id":null,"html_url":"https://github.com/defnull/pixelflut","commit_stats":{"total_commits":46,"total_committers":9,"mean_commits":5.111111111111111,"dds":"0.17391304347826086","last_synced_commit":"bf5217b14aa8e9e6ebd98707454033f482cbae4e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defnull%2Fpixelflut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defnull%2Fpixelflut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defnull%2Fpixelflut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defnull%2Fpixelflut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/defnull","download_url":"https://codeload.github.com/defnull/pixelflut/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243742593,"owners_count":20340666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T21:12:05.839Z","updated_at":"2025-03-15T14:30:39.114Z","avatar_url":"https://github.com/defnull.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Pixelflut: Multiplayer canvas\n=============================\n\nWhat happens if you give a bunch of hackers the ability to change pixel colors on a projector screen? See yourself :)\n\nPixelflut is a very simple (and inefficient) ASCII based network protocol to draw pixels on a screen.\nYou can write a basic client in a single line of shell code if you want, but you only get to change a single pixel at a time.\nIf you want to get rectangles, lines, text or images on the screen you have to implement that functionality yourself. That is part of the game.\n\nPixelflut Protocol\n------------------\n\nPixelflut defines four main commands that are always supported to get you started:\n\n* `HELP`: Returns a short introductional help text.\n* `SIZE`: Returns the size of the visible canvas in pixel as `SIZE \u003cw\u003e \u003ch\u003e`.\n* `PX \u003cx\u003e \u003cy\u003e` Return the current color of a pixel as `PX \u003cx\u003e \u003cy\u003e \u003crrggbb\u003e`.\n* `PX \u003cx\u003e \u003cy\u003e \u003crrggbb(aa)\u003e`: Draw a single pixel at position (x, y) with the specified hex color code.\n  If the color code contains an alpha channel value, it is blended with the current color of the pixel.\n\nYou can send multiple commands over the same connection by terminating each command with a single newline character (`\\n`).\n\nExample:\n\n    $ echo \"SIZE\" | netcat pixelflut.example.com 1337\n    SIZE 800 600\n    $ echo \"PX 23 42 ff8000\" | netcat pixelflut.example.com 1337\n    $ echo \"PX 23 42\" | netcat pixelflut.example.com 1337\n    PX 23 42 ff8000\n\nImplementations MAY support additional commands or have less strict parsing rules (e.g. allow `\\r\\n` or any whitespace between parameters) but they MUST support the commands above. \n\nServer Implementations\n----------------------\n\nThis repository contains multiple implementations of the pixelflut protocol. Pull requests for additional implementations or improvements are always welcomed.\n\n### `/pixelflut` (python server)\n\nServer written in Python, based on gevent and pygame. Easy to hack with, but a bit slow. In fact, it was slowed down on purpose to be more fair and encourage smart drawing techniques instead of image spamming. Perfect for small groups.\n\n    cd pixelflut\n    sudo apt-get install python-gevent python-pygame python-cairo\n    mkdir save\n    python pixelflut.py brain.py\n\n#### `/pixelwar` (java server)\n\nServer written in Java8, based on netty and awt. Optimized for speed and large player groups, fast networks or high-resolution projectors. This is probably the most portable version and runs on windows, too.\n\n    cd pixelwar\n    sudo apt-get install maven openjdk-8-jdk\n    mvn package\n    java -jar target/pixelwar*-jar-with-dependencies.jar\n    \nor, if you have docker installed but don't want to install maven:\n\n    docker run -it --rm --user \"`id -u`:`id -g`\" --volume \"`pwd`:/build\" --workdir /build maven:3-jdk-8-alpine mvn -Duser.home=/build clean package\n    java -jar target/pixelwar*-jar-with-dependencies.jar\n\n#### `/pixelnuke` (C server)\n\nServer written in C, based on libevent2, OpenGL, GLFW and pthreads. It won't get any faster than this. Perfect for fast networks and large groups.\n\n    cd pixelnuke\n    sudo apt-get install build-essential libevent-dev libglew-dev libglfw3-dev\n    make\n    ./pixelnuke\n\nKeyboard controls:\n\n* `F11`: Toggle between fullscreen and windowed mode\n* `F12`: Switch between multiple monitors in fullscreen mode\n* `c`: Clear the screen (50% black, hit multiple times)\n* `q` or `ESC`: Quit\n\nAdditional Commands:\n\n* `STATS` Return statistics as `STATS \u003cname\u003e:\u003cvalue\u003e ...`\n  * `px:\u003cuint\u003e` Number of pixels drawn so far. Will overflow eventually.\n  * `conn:\u003cuint\u003e` Number of currently connected clients.\n\nPlanned Features:\n- [x] Toggle between windowed/fullscreen mode and switch monitors in fullscreen mode.\n- [ ] Persist pixel buffer between restarts. Use an mmap-ed file for pixel data?\n- [ ] Save to PPM (via key, timer or admin command) and add docs/tools to convert these into a video.\n- [ ] Support to draw directly to a framebuffer (no OpenGL or X Server dependency -\u003e Raspberry-PI compatible)\n- [ ] Showcase-Mode: Players won't draw at the same time, but take turns. Each player gets N seconds of exclusive draw time)\n- [ ] Limit concurrent connections on a per IP basis.\n- [ ] Admin commands: Unlock additional commands with a password (e.g. `PX2 \u003cx\u003e \u003cy\u003e \u003crrggbbaa\u003e` to draw to the overlay layer)\n\n\nEven more implementations\n-------------------------\n\nA fast GPU accelerated pixelflut server in Rust.  \nhttps://github.com/timvisee/pixelpwnr-server\n\nLinks and Videos\n----------------\n\nPixelflut at EasterHegg 2014 in Stuttgart, Germany  \nhttp://vimeo.com/92827556\n\nPixelflut Bar (SHA2017)  \nhttps://wiki.sha2017.org/w/Pixelflut_bar  \nhttps://www.youtube.com/watch?v=1Jt-X437MKM\n\nPixelflut GPN17 Badge  \nhttps://www.youtube.com/watch?v=JGg4zqqumvs\n\nRüspeler Tüfteltage (Kliemannsland, 2018)\nhttps://youtu.be/TijSQYZoRUU?t=6m\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefnull%2Fpixelflut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdefnull%2Fpixelflut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefnull%2Fpixelflut/lists"}