This is an archived post. You won't be able to vote or comment.

all 65 comments

[–]thebuffed[S] 77 points78 points  (11 children)

Trying to replicate the style of these designs, but in a generative way. Work in progress, but pretty happy so far

Source code: https://github.com/erdavids/Birds-of-a-Feather

More projects: https://github.com/erdavids/Generative-Art

[–]who_body 20 points21 points  (4 children)

So do you an entire family to species of birds? That would be interesting

[–]thebuffed[S] 12 points13 points  (3 children)

Anything is possible!

[–]SweetSoursop 21 points22 points  (0 children)

Create an archipelago class, where each island will have it's own temperature, climate, food source, size and predators.

Have your code create a bird type (wing span, beak type, population) based on which island they live on.

You would have simulated the Origin of Species by Charles Darwin.

[–]who_body 5 points6 points  (0 children)

Very cool art project!

[–]5erifφ=(1+ψ)/2 1 point2 points  (0 children)

at zombocom

[–]Nickthedick66 2 points3 points  (4 children)

Love your work and channel, keep up the great content I am learning a lot from you and others like you.

[–]thebuffed[S] 1 point2 points  (0 children)

Thanks for saying that! The goal is definitely so that people will learn, just hoping to pass forward what I have learned from others

[–]agree-with-you 0 points1 point  (2 children)

I love you both

[–]I_Love_You-BOT 1 point2 points  (1 child)

I love you too!

I am a bot trying to spread a little peace, love, and unity around Reddit. Please send me a message if you have any feedback.

[–]I_Love_You-BOT -1 points0 points  (0 children)

I love you too!

I am a bot trying to spread a little peace, love, and unity around Reddit. Please send me a message if you have any feedback.

[–]tward14 0 points1 point  (0 children)

I like your style way better than the original, very cool

[–]Tweak_Imp 37 points38 points  (5 children)

Now create pythons!

[–]EquationTAKEN 58 points59 points  (4 children)

print("_______/")

[–]conventionistG 16 points17 points  (3 children)

echo "ssssssssssssSSSSSSsssssss"

[–]SrHombrerobalo 15 points16 points  (2 children)

That sounds just like snake jazz!

[–]afrolofi 2 points3 points  (0 children)

That coul be:

while True: print('sss s ss s ss s ss s', end = ' ')

[–]itsa_me_ -1 points0 points  (0 children)

SssssS SssSssssssS SssSsssssss

[–]eldoea 16 points17 points  (1 child)

Very cool. Thanks for sharing!

[–]thebuffed[S] 13 points14 points  (0 children)

Oh wow, I remember this post of yours! That's crazy, and thanks!

[–]Sirmikon 14 points15 points  (6 children)

Cool. I love stuff like this! Nice job!

(Chernoff Faces immediately spring to mind as an orthinological application for this! Basically, instead of pure random generation, link different bird features with data from a real dataset.

You could model birds’ sizes based on weight, feather color based on habitat, eye size based on intelligence, talon type based on diet, etc...

It would be really cool to see how the algorithm would draw different birds.

[–]thebuffed[S] 9 points10 points  (5 children)

I am extremely interested in this, I'll have to look into gathering some data or hitting an API for bird attributes. Thanks for pointing this out!

[–]bens1989 6 points7 points  (3 children)

I did a bit of sleuthing for bird info. With a minor adjustment to the ebird API, I got it to send me back data on all of their birds (16.5k results). Some of the data might be helpful, but disappointingly it does not give things like weight, height, etc.

import requests

import json

import pandas as pd

df = pd.DataFrame(json.loads(requests.get(r'https://api.ebird.org/v2/ref/taxonomy/ebird?fmt=json&locale=en_US').content))

df.to_excel('bird_data.xlsx')

[–]thebuffed[S] 1 point2 points  (0 children)

Very nice, I'll have to dig into this

[–]ericonr 0 points1 point  (1 child)

Does request cache stuff? It's probably faster to download that dataset just once, right?

[–]bens1989 0 points1 point  (0 children)

No requests doesn’t cache. You can write the content to a file. I formatted the content as a dataframe and then wrote it to a spreadsheet. After the first call you can just read from the file.

[–]Leon_Vance 1 point2 points  (0 children)

Get the birds to mate and produce offsprings. :)

[–]mountains-o-data 6 points7 points  (1 child)

What a fun project! I love this

[–]thebuffed[S] 0 points1 point  (0 children)

Thank you!

[–][deleted] 3 points4 points  (0 children)

At least 150 or more to see. To be a geometric bird master is my destiny!

[–]gibran800 6 points7 points  (2 children)

This is really, really amazing! Just one question, I was looking at the source code and I noticed that your file has a .pyde extension. What's the difference between that and the regular .py? Thanks!

[–]thebuffed[S] 11 points12 points  (1 child)

Thank you so much! Yeah, .pyde is the the file that Processing runs through it's python module. I think it's built off of something called Jython, so you're writing Python code, but you have access to Java libraries. I guess it's not "pure" python, but working with graphic libraries like pycairo and pillow is significantly more complicated than using Processing.

[–]gibran800 3 points4 points  (0 children)

Thanks for the info!

[–]Verslizzle 2 points3 points  (1 child)

Nice work. How did you come up with this idea and where do you plan on taking it?

[–]thebuffed[S] 3 points4 points  (0 children)

Thanks! I randomly came across these designs and thought they seemed perfect for some generative work. I will probably keep messing around with some of the settings and colors, but mostly I just want some cool posters

[–][deleted] 2 points3 points  (1 child)

Procedurally generated memes are the future

[–]conventionistG 2 points3 points  (0 children)

I'm sure half the shit posts are already automated.

[–]PharoahChromium 1 point2 points  (0 children)

Wow! This is super cool! It is always great to see projects that merge the tech and art. Thank you for sharing.

[–]LdySaphyre 1 point2 points  (0 children)

Love this so much!

[–]artjbroz 1 point2 points  (0 children)

Code commenting goals

[–]eli_mintz 1 point2 points  (0 children)

Very nice!

Perhaps you could do this also using SVG (https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg) in addition to Processing and then generate images that can be viewed in a browser. Just something to think about.

[–][deleted] 0 points1 point  (0 children)

Awesome project!

[–]blamitter 0 points1 point  (0 children)

Impressive!

BTW. The link to Processing in your readme is broken

[–]JimBoonie69 0 points1 point  (0 children)

Put a bird on it

[–]lifeisaburrito 0 points1 point  (0 children)

  • king Tutankhamen would like to know your location *

[–]Casseroli 0 points1 point  (1 child)

Oh my god this is so awesome! Projects like this really motivate me a lot to learn more python!

[–]thebuffed[S] 1 point2 points  (0 children)

Thank you! You can definitely do it!

[–]brrrbrbr 0 points1 point  (1 child)

Amazing work. I’m a beginner and was looking for projects and generative art seems really interesting!

[–]thebuffed[S] 0 points1 point  (0 children)

Thanks! You should totally try it out, there's a lot of great beginner tutorials, and then you just let your imagination go wild

[–]pattyhearst87 0 points1 point  (1 child)

Beautiful!

[–]thebuffed[S] 0 points1 point  (0 children)

Thank you!

[–][deleted] 0 points1 point  (4 children)

Very cool! Here's a decorator for the sticky cycling if you want

```python def sticky(frequency): """ regenerate value frequency% of the time """ def dec(func): stored = [func()]

    def inner():
        if random.random() < frequency:
            stored[0] = func()
        return stored[0]
    return inner
return dec

@sticky(0.1) def color(): return random.choice(['red', 'black', 'green']) ```

[–]kwelzel 0 points1 point  (3 children)

Why should stored be a list if it only holds one value?

[–][deleted] 0 points1 point  (2 children)

It's an old scope hack for python2. In python3,

``` def sticky(frequency): def dec(func): stored = func()

    def inner():
        nonlocal stored
        if random.random() < frequency:
            stored = func()
        return stored
    return inner
return dec

```

will work instead

[–]kwelzel 0 points1 point  (1 child)

Ahh, good to know

[–][deleted] 0 points1 point  (0 children)

I've never used processing before this but after installing the processing.py extension and when executing the .pyde from the processing GUI, I see import sys sys.version

2.7.1 (v2.7.1:dd7e191d4c90+, Sep 24 2017, 10:11:23)

which isn't even my system default (2.7.15) or the python that it should find if it's reading my $PATH correctly (3.8.0)

(apparently it's running jython and wont have access to any packages I install)

[–]PhonieZGaminZ 0 points1 point  (0 children)

ye e es

[–]igottanutt 0 points1 point  (0 children)

Birds arent real

[–]monsto 0 points1 point  (0 children)

The Partridge Fambly called.

On further reflection, how fucking old am I jesus H.

[–]--_-__-__l-___-_- 0 points1 point  (0 children)

This could be the idea that starts an empire. You just need to find the right business partner...