Canvas

2091 readers
1 users here now

Canvas — The Fediverse’s r/place


2024 Concluded!


Get a print!


Links

Timelapses

founded 1 year ago
MODERATORS
51
 
 

It’s that time of the year again! Canvas 2024 has once again been kicked off, and the mural has started strong.The effort is reminiscent of r/Place, Reddit’s annual collaborative art project. This time, however, the event isn’t limited to just Lemmy – the whole Fediverse is invited.

52
53
54
55
139
CANVAS 2024 IS LIVE (canvas.fediverse.events)
submitted 4 months ago by grant@toast.ooo to c/canvas@toast.ooo
 
 

ROCKY START

WE'RE LIVE

place pixels, yeah

56
96
submitted 4 months ago* (last edited 4 months ago) by Ategon@programming.dev to c/canvas@toast.ooo
 
 

I collected together all of the templates I could find for different groups (originally did this to see where I can expand the programming.dev template out to but figured other people might be interested so they can see where there wont be as much conflict for space

Most of these are from the group finder thread. Some may be a pixel off but I tried to get things as close as possible (some of these are recreated since I couldnt get the source image from imgur or the source image is larger and was shrunk for the canvas with me not being able to replicate the shrink behaviour)

The factions included in here are:

  • Australia
  • Bronies
  • Osu
  • New Zealand
  • Blahaj.Zone
  • Programming.Dev
  • Toast.ooo
  • SquaredCircle
  • Arecibo message
  • Touhou
  • SCP
  • jlai.lu
  • Anarchy chess
  • Perchance
  • Feddit.org

Ill try to do an updated post if needed with additional factions that post their templates close to when the event starts

And if theres anyone who wants to join up with the programming.dev template if youre tech related or if you want to ally feel free to reach out (you can find our groups in the group finder thread)

edit: moved SquaredCircle since they moved to not overlap with Osu

edit 2: added Lilou41's template

edit 3: updated osu and bronies to be more recent art

edit 4: added Lvxferre's template

edit 5: added touhou hijack

edit 6: added jlai lu

edit 7: added scp

edit 8: added godot and ategondev

edit 9: added anarchy chess, perchance, and feddit

edit 10: added another aus template

edit 11: fixed aus size

edit 12: moved triangle position

edit 13: added dolls now and paf

edit 14: updated toast art

57
106
submitted 4 months ago* (last edited 4 months ago) by grant@toast.ooo to c/canvas@toast.ooo
 
 

i may be 2 hours late to the actual 24 hour mark...

  • 🕐 Countdown
  • 🤝 Find/share your groups/templates in the group finder post
  • 🌎 The entire Fediverse is included, not just Lemmy this time!
  • 🔳 500x500
  • 💬 Matrix 🔗 Discord (bridge is bugged rn, i'll edit this post when it's fixed)

🐘 @canvas@fediverse.events

🗣 Spread the word! 🎨

58
81
submitted 4 months ago* (last edited 4 months ago) by grant@toast.ooo to c/canvas@toast.ooo
 
 

the first public look at the Canvas rewrite

The event is happening in roughly 4 days from now 🎨

🔗 You can now create template URLs to figure out where you want your group's template to go (settings -> template) make sure the switch is on, then you can copy the URL of the website

🌎 https://canvas.fediverse.events 🖌 Palette: Pxls 13

🔽 Post your group details w/ your template link below so people can find and join your group! (Template link, Matrix, Discord, Lemmy Community, etc) 🤝

59
80
submitted 4 months ago* (last edited 4 months ago) by grant@toast.ooo to c/canvas@toast.ooo
 
 

Canvas happens in 336 hours! (or 2 weeks, take your pick)

CountdownMatrix SpaceDiscordMastodon Announcements

At the end of the event, i’ll be selling prints of the Canvas to help fund the project 🎉 (and i’ll also be selling last year’s prints, but this year only 👀)

details for the sale have not been announced (the post will get pinned in !canvas@toast.ooo & posted on the mastodon account)

I am also planning to sell various instance’s logos as vinyl stickers, with the profits going towards those instances

If you are an instance admin and want to join in on that, send me a message on Matrix (@grant:aftermath.gg), send me an email (hello@sc07.company) or send me a message on Discord (grahhnt), whatever works best for you

(or send this post to your favorite instance that you want to get a sticker from (and support them))

Instances joining the sticker sale:

  • lemmy.world
  • mastodon.world
  • toot.community
  • blahaj.zone / lemmy.blahaj.zone

Edit: rephrased the image

60
28
2024 Canvas sale (lemmy.zip)
submitted 5 months ago* (last edited 5 months ago) by possiblylinux127@lemmy.zip to c/canvas@toast.ooo
 
 

After the 2024 canvas event would it be possible to sell a printed canvas as a fundraiser for Lemmy and Mastodon?

61
168
Canvas in 30 days 👀 (canvas.fediverse.events)
submitted 5 months ago by grant@toast.ooo to c/canvas@toast.ooo
 
 

turns out I did my math wrong, so it’s a little less than 30 days

July 12th, 2024 @ midnight EDT

https://canvas.fediverse.events

✨ this year’s event also supports the entire fediverse not just Lemmy!

(you have to be able to make/receive text posts, like mastodon, lemmy, pixelfed, etc) (peertube accounts will not work)

you can get update announcements on other fedi platforms with @canvas@fediverse.events link

chat about Canvas on Matrix or Discord (they’re bridged)

62
 
 

There hasn't been much activity in this sub recently, and I'm curious if there are any updates. Do we have a tentative date yet?

I imagine it will take a few weeks to spread awareness of the event around the Fediverse, and for the various sublemmys to get organized...

63
 
 

not limiting it to the ones that get recommended, i just want to know the ones that i should definitely test with to ensure they work :)

64
 
 

the community has spoken, here's the new icon & banner

very excited for this year 👀

:mastodon: mastodon canvas announcements are at @canvas@fediverse.events

if you use lemmy join the community to stay updated: @canvas@toast.ooo ([!canvas@toast.ooo](/c/canvas@toast.ooo))

#fediverse #fediverseevents #canvas

65
 
 

here's my terrible canvas logo

66
 
 
67
 
 

500x500 size, cos last canvas was too big

Last for longer, maybe 2weeks or more

Early 2024, maybe February -march or April

Announced early- like a week in advance for groups to form

@grant@toast.ooo

68
 
 

Where happend all the Organisation of the Artworks at the Canvas?

Especially Europe I would like to know.

Besonders Deutschland und Europa interessiert mich.

69
44
submitted 1 year ago* (last edited 1 year ago) by grant@toast.ooo to c/canvas@toast.ooo
 
 

fediverse.events

we've got a website for all the fediverse events now!

there's also a mastodon account for event announcements and canvas announcements

announcements will also still be posted here, don't worry

very exciting things planned (and not just for Canvas)


If you have any event ideas you can post them here, message me on Matrix or shoot me an email

70
 
 
71
 
 

Well done people!

72
 
 

Download the log file for canvas (check the pinned post as well in case the link changes)

Grab this snippet of code from Github (if you don't understand this code please DO NOT run it. Never run random code you grabbed from the internet if you can't read it :P)

Make sure you have Python and Python Pillow installed.

Change these variables to suite your needs

users = None
instances = None

The default None is actually "show me everything", I'm just bad at naming things.

E.g. I want to see the top 10 combined pixel placers, I would

 users = "guantousam@lemmy.world \
         ShadowGlider@lemmy.world \
         DragonM97HD@lemmy.world \
         Lokloy@lemmy.world \
         DJSoundwav3@lemmy.world \
         ubermeisters@lemmy.world \
         peter_pangolin@toast.ooo \
         Bottom@lemm.ee \
         NanoPi@lemmy.world \
         akq@lemm.ee"

and set the instances to None

This would output this image

You can also set it to show pixels after a certain timestamp (although I haven't tested that properly)

Source code if you don't want to go to gist

spoiler

    This is free and unencumbered software released into the public domain.

    Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.

    In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    For more information, please refer to <http://unlicense.org/>

from PIL import Image, ImageDraw
from datetime import datetime

# Get yours here https://cdn.sc07.company/canvas/2023/pixels.log.txt
log_filename = 'pixels.log.txt'

# Show pixles after this unix timestamp
start_time = 0

# Show specific users (example top 10 pixel placers)
# users = "guantousam@lemmy.world \
#         ShadowGlider@lemmy.world \
#         DragonM97HD@lemmy.world \
#         Lokloy@lemmy.world \
#         DJSoundwav3@lemmy.world \
#         ubermeisters@lemmy.world \
#         peter_pangolin@toast.ooo \
#         Bottom@lemm.ee \
#         NanoPi@lemmy.world \
#         akq@lemm.ee"
# None specified will show ALL
# CASE SENSITIVE!!!
users = None

# Instances. None specified will show ALL instances
# Example, only show blahaj and lemmy.zip
# instances = "lemmy.blahaj.zone lemmy.zip"
instances = None

# Color palette dictionary
color_palette = {
    0: "000000",
    1: "222222",
    2: "555555",
    3: "888888",
    4: "CDCDCD",
    5: "FFFFFF",
    6: "FFD5BC",
    7: "FFB783",
    8: "B66D3D",
    9: "77431F",
    10: "FC7510",
    11: "FCA80E",
    12: "FDE817",
    13: "FFF491",
    14: "BEFF40",
    15: "70DD13",
    16: "31A117",
    17: "0B5F35",
    18: "277E6C",
    19: "32B69F",
    20: "88FFF3",
    21: "24B5FE",
    22: "125CC7",
    23: "262960",
    24: "8B2FA8",
    25: "D24CE9",
    26: "FF59EF",
    27: "FFA9D9",
    28: "FF6474",
    29: "F02523",
    30: "B11206",
    31: "740C00"
}

# Function to convert hex color to RGB tuple
def hex_to_rgb(hex_color: str) -> tuple[int, int, int]:
    return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))


# Mapping pallet index to RGB color values
color_mapping = {index: hex_to_rgb(hex_color) for index, hex_color in color_palette.items()}

# Read log
def read_log_entries(filename: str) -> list[tuple]:
    log_entries = []
    with open(filename, 'r') as log_file:
        for line in log_file:
            parts = line.strip().split('\t')
            timestamp = parts[0]
            user = parts[1]
            x_coord = int(parts[2])
            y_coord = int(parts[3])
            color = int(parts[4])
            action = parts[5]
            log_entries.append((timestamp, user, x_coord, y_coord, color, action))
    return log_entries


def filter_pixels(actions: str, start_time: int, users = None, instances = None):
    log_entries = read_log_entries(log_filename)
    pixel_actions = {}
    for entry in log_entries:
        timestamp, user, x_coord, y_coord, color, action = entry
        if start_time == 0 or datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S,%f') > datetime.fromtimestamp(start_time):
            if not users or user in users:
                if not instances or user.split("@")[-1] in instances:
                    if action == actions:
                        pixel_actions[(x_coord, y_coord)] = (user, color_mapping[color], timestamp)
    return pixel_actions


def draw_pixels(pixels, output: str) -> None:
    image_size = (1000, 1000)
    image = Image.new("RGB", image_size, "white")
    draw = ImageDraw.Draw(image)

    for pixel, (user, color, _) in pixels.items():
        x, y = pixel
        draw.point((x, y), fill=color)

    image.save(output)


draw_pixels(filter_pixels("user place", start_time, users, instances), "output_image.png")


73
 
 

I looked through the image comparing how communities wrote down their handle.

So I made a list of communities which wrote down their handle:

For a bunch of them I had to look up who posted it, because the handle was ambiguous. Which means in some cases there can be a bigger community of the same name like it’s the case with !gamedev and !rust.

I only list handles that follow the format !x[@tld], x@tld, [tld/]c/x, [tld/]m/x

74
143
submitted 1 year ago* (last edited 1 year ago) by alex@feddit.de to c/canvas@toast.ooo
 
 

Canvas but it's only the pixels placed by the top Instances.
Feel free to ask for your Instance in the comments if yours isn't included.
Edit: I have replied to a lot of requests for smaller Instances and individual users in the comments. You should absolutely check those out as well!

lemmy.world

feddit.de

lemmy.blahaj.zone

lemm.ee

sh.itjust.works

lemmy.ml

lemmy.ca

toast.ooo

programming.dev

lemmy.zip

beehaw.org

spoilerFinally: My personal canvas. If you want to see what you have placed this event, feel free to hit me up

75
view more: ‹ prev next ›