vsketch is a Python generative art toolkit for plotters

Overview

vsketch

python Test Documentation Status

What is vsketch?

vsketch is a Python generative art toolkit for plotters with the following focuses:

  • Accessibility: vsketch is easy to learn and feels familiar thanks to its API strongly inspired from Processing.
  • Minimized friction: vsketch automates every part of the creation process (project initialisation, friction-less iteration, export to plotter-ready files) through a CLI tool called vsk and a tight integration with vpype.
  • Plotter-centric: vsketch is made for plotter users, by plotter users. It's feature set is focused on the peculiarities of this medium and doesn't aim to solve other problems.
  • Interoperability: vsketch plays nice with popular packages such as Numpy and Shapely, which are true enabler for plotter generative art.

vsketch is the sum of two things:

  • A CLI tool named vsk to automate every part of a sketch project lifecycle::
    • Sketch creation based on a customizable template.
    • Interactive rendering of your sketch with live-reload and custom parameters.
    • Batch export to SVG with random seed and configuration management as well as multiprocessing support.
  • An easy-to-learn API similar to Processing to implement your sketches.

This project is at an early the stage and needs contributions. You can help by providing feedback and improving the documentation.

Installing and Running the examples

The easiest way to get started is to obtain a local copy of vsketch's repository and run the examples:

$ git clone https://github.com/abey79/vsketch
$ cd vsketch

Create a virtual environment and activate it:

$ python3 -m venv venv
$ source venv/bin/activate

Install vsketch:

$ pip install .

You are read to run the examples:

$ vsk run examples/quick_draw

Additional examples may be found in the author's personal collection of sketches.

Getting started

This section is meant as a quick introduction of the workflow supported by vsketch. Check the documentation for a more complete overview.

Open a terminal and create a new project:

$ vsk init my_project

This will create a new project structure that includes everything you need to get started:

$ ls my_project
config
output
sketch_my_project.py

The sketch_my_project.py file contains a skeleton for your sketch. The config and output sub-directories are used by vsk to store configurations and output SVGs.

Open sketch_my_project.py in your favourite editor and modify it as follows:

None: vsk.vpype("linemerge linesimplify reloop linesort") if __name__ == "__main__": SchotterSketch.display() ">
import vsketch

class SchotterSketch(vsketch.SketchClass):
    def draw(self, vsk: vsketch.SketchClass) -> None:
        vsk.size("a4", landscape=False)
        vsk.scale("cm")

        for j in range(22):
            with vsk.pushMatrix():
                for i in range(12):
                    with vsk.pushMatrix():
                        vsk.rotate(0.03 * vsk.random(-j, j))
                        vsk.translate(
                            0.01 * vsk.randomGaussian() * j,
                            0.01 * vsk.randomGaussian() * j,
                        )
                        vsk.rect(0, 0, 1, 1)
                    vsk.translate(1, 0)
            vsk.translate(0, 1)

    def finalize(self, vsk: vsketch.Vsketch) -> None:
        vsk.vpype("linemerge linesimplify reloop linesort")

if __name__ == "__main__":
    SchotterSketch.display()

Your sketch is now ready to be run with the following command:

$ vsk run my_project

You should see this:

image

Congratulation, you just reproduced Georg Nees' famous artwork!

Wouldn't be nice if you could interactively interact with the script's parameters? Let's make this happen.

Add the following declaration at the top of the class:

class SchotterSketch(vsketch.SketchClass):
    columns = vsketch.Param(12)
    rows = vsketch.Param(22)
    fuzziness = vsketch.Param(1.0)
    
    # ...

Change the draw() method as follows:

    def draw(self, vsk: vsketch.Vsketch) -> None:
        vsk.size("a4", landscape=False)
        vsk.scale("cm")

        for j in range(self.rows):
            with vsk.pushMatrix():
                for i in range(self.columns):
                    with vsk.pushMatrix():
                        vsk.rotate(self.fuzziness * 0.03 * vsk.random(-j, j))
                        vsk.translate(
                            self.fuzziness * 0.01 * vsk.randomGaussian() * j,
                            self.fuzziness * 0.01 * vsk.randomGaussian() * j,
                        )
                        vsk.rect(0, 0, 1, 1)
                    vsk.translate(1, 0)
            vsk.translate(0, 1)

Hit ctrl-S/cmd-S to save and, lo and behold, corresponding buttons just appeared in the viewer without even needing to restart it! Here is how it looks with some more fuzziness:

image

Let's play a bit with the parameters until we find a combination we like, then hit the Save button and enter a "Best config" as name.

image

We just saved a configuration that we can load at any time.

Finally, being extremely picky, it would be nice to be able to generate ONE HUNDRED versions of this sketch with various random seeds, in hope to find the most perfect version for plotting and framing. vsk will do this for you, using all CPU cores available:

$ vsk save --config "Best config" --seed 0..99 my_project

You'll find all the SVG file in the project's output sub-directory:

image

Next steps:

  • Use vsk integrated help to learn about the all the possibilities (vsk --help).
  • Learn the vsketch API on the documentation's overview and reference pages.

Acknowledgments

Part of this project's documentation is inspired by or copied from the Processing project.

License

This project is licensed under the MIT license. The documentation is licensed under the CC BY-NC-SA 4.0 license. See the documentation for details.

Comments
  • Installation issues

    Installation issues

    Hello,

    I am running macOS big sur on an Apple M1 (MacBook Air) I am trying to install vsketch by following the documentation. There are a couple of dependencies required by vsketch that I could successfully install with brew (scipy, geos, shapely) but I have trouble in particular with PySide2.

    I keep getting the following error ERROR: No matching distribution found for PySide2<6.0.0,>=5.15.2 although I have installed PySide2 via home-brew

    Do you have any idea what is happening? Could you help me with installing vsketch?

    opened by nltran 11
  • expose random seed

    expose random seed

    Description

    Allows the user to access the random seed once it has been set via vsk.random_seed.

    Checklist

    • [x] feature/fix implemented
    • [x] mypy returns no error
    • [x] tests added/updated and pytest --runslow succeeds
    • [x] documentation added/updated and building with no error (make clean && make html in docs/)
    • [x] examples added/updated
    • [x] code formatting ok (black and isort)
    opened by bleything 9
  • Add Text API

    Add Text API

    This commit adds an integrated way to add text to your sketch, without having to resort to calling vsk.vpype(...).

    As an example, I have ported the "postcard" sketch from https://github.com/abey79/sketches to the new API.

    Description

    As discussed in https://github.com/abey79/vsketch/issues/229. No docs yet while we hash out the API details.

    Checklist

    • [x] feature/fix implemented
    • [x] mypy returns no error
    • [x] tests added/updated and pytest --runslow succeeds
    • [x] documentation added/updated and building with no error (make clean && make html in docs/)
    • [x] examples added/updated
    • [x] code formatting ok (black and isort)
    opened by lenary 7
  • 'pip install .' is failing

    'pip install .' is failing

    I've tried using Windows and Ubuntu to try and install this and feel like I'm banging my head against a brick wall, so would appreciate any hints.

    The instructions seem to be written for Linux users since commands in Windows differ slightly. When installing via Windows it takes a ridiculously long time to collect dependencies (24 hours +) and then fails. Here's a sample snippet of the output I'm getting:

    INFO: pip is looking at multiple versions of toml to determine which version is compatible with other requirements. This could take a while.
    INFO: pip is looking at multiple versions of text-unidecode to determine which version is compatible with other requirements. This could take a while.
    INFO: pip is looking at multiple versions of pywinpty to determine which version is compatible with other requirements. This could take a while.
      Using cached pywinpty-0.5.tar.gz (50.8 MB)
    Collecting terminado>=0.8.3
      Using cached terminado-0.9.4-py3-none-any.whl (14 kB)
    Collecting pywinpty>=0.5
      Using cached pywinpty-1.0.1-cp39-none-win_amd64.whl (1.4 MB)
    INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
    

    Under Ubuntu, I can't progress to try the examples. I've followed the installation instructions using a virtual environment. Here's the output I get:

    $ git clone https://github.com/abey79/vsketch
    Cloning into 'vsketch'...
    remote: Enumerating objects: 818, done.
    remote: Counting objects: 100% (92/92), done.
    remote: Compressing objects: 100% (85/85), done.
    remote: Total 818 (delta 30), reused 13 (delta 6), pack-reused 726
    Receiving objects: 100% (818/818), 15.11 MiB | 2.34 MiB/s, done.
    Resolving deltas: 100% (422/422), done.
    $ cd vsketch
    $ python3 -m venv venv
    $ source venv/bin/activate
    $ pip install .
    Directory '.' is not installable. File 'setup.py' not found.
    

    Installing via pip gives me this output:

    $ pip install git+https://github.com/abey79/vsketch#egg=vsketch
    Collecting vsketch from git+https://github.com/abey79/vsketch#egg=vsketch
      Cloning https://github.com/abey79/vsketch to /tmp/pip-build-d1NJgc/vsketch
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
        IOError: [Errno 2] No such file or directory: '/tmp/pip-build-d1NJgc/vsketch/setup.py'
        
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-d1NJgc/vsketch/
    
    

    Where am I going wrong here? Thanks in advance.

    opened by mahtDFR 7
  • vsk run examples/quick_draw gives TypeError: 'NoneType' object is not callable

    vsk run examples/quick_draw gives TypeError: 'NoneType' object is not callable

    I am following all steps but getting this error when I run vsk run examples/quick_draw:

    Traceback (most recent call last):
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/bin/vsk", line 6, in <module>
        from vsketch_cli.cli import cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch_cli/cli.py", line 11, in <module>
        import vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/__init__.py", line 3, in <module>
        from .sketch_class import Param, ParamType, SketchClass
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/sketch_class.py", line 10, in <module>
        from .vsketch import Vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/vsketch.py", line 22, in <module>
        import vpype_cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/__init__.py", line 5, in <module>
        from .blocks import *
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/blocks.py", line 7, in <module>
        from .cli import BlockProcessor, cli, execute_processors
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/cli.py", line 126, in <module>
        @cli.result_callback()
    TypeError: 'NoneType' object is not callable
    (genart-venv) (base) invlabs-MacBook-Pro:vsketch invlab$ vsk run examples/quick_drawvsk run examples/quick_draw
    Traceback (most recent call last):
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/bin/vsk", line 6, in <module>
        from vsketch_cli.cli import cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch_cli/cli.py", line 11, in <module>
        import vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/__init__.py", line 3, in <module>
        from .sketch_class import Param, ParamType, SketchClass
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/sketch_class.py", line 10, in <module>
        from .vsketch import Vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/vsketch.py", line 22, in <module>
        import vpype_cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/__init__.py", line 5, in <module>
        from .blocks import *
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/blocks.py", line 7, in <module>
        from .cli import BlockProcessor, cli, execute_processors
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/cli.py", line 126, in <module>
        @cli.result_callback()
    TypeError: 'NoneType' object is not callable
    (genart-venv) (base) invlabs-MacBook-Pro:vsketch invlab$ vsk run examples/quick_draw                           
    Traceback (most recent call last):
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/bin/vsk", line 6, in <module>
        from vsketch_cli.cli import cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch_cli/cli.py", line 11, in <module>
        import vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/__init__.py", line 3, in <module>
        from .sketch_class import Param, ParamType, SketchClass
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/sketch_class.py", line 10, in <module>
        from .vsketch import Vsketch
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vsketch/vsketch.py", line 22, in <module>
        import vpype_cli
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/__init__.py", line 5, in <module>
        from .blocks import *
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/blocks.py", line 7, in <module>
        from .cli import BlockProcessor, cli, execute_processors
      File "/Users/invlab/Desktop/ML/Generative-Art/vsketch/genart-venv/lib/python3.7/site-packages/vpype_cli/cli.py", line 126, in <module>
        @cli.result_callback()
    TypeError: 'NoneType' object is not callable
    
    opened by mansi-aggarwal-2504 7
  • Exit vsk run when Qt window is closed

    Exit vsk run when Qt window is closed

    Description

    Attempt at fixing an issue where the vsk run command hangs/continues running after the Qt window is closed.

    I don't fully understand the fix, as I don't have much experience with Qt or asyncio, but I adopted some lines from various python Qt examples, and added an stop event to the file watcher.

    Checklist

    • [x] feature/fix implemented
    • [x] mypy returns no error
    • [ ] tests added/updated and pytest --runslow succeeds
    • [ ] documentation added/updated and building with no error (make clean && make html in docs/)
    • [ ] examples added/updated
    • [x] code formatting ok (black and isort)
    opened by burk 6
  • Feature Request: Easier Text in Vsketches

    Feature Request: Easier Text in Vsketches

    I've been working with and really enjoying vsketch. Thank you for your hard work on it!

    One thing I've run into is that I want to include text in some of my sketches, and as far as I can tell, the easiest way is to use your "hack" from your postcards sketch. I've been using the following (because I use pushMatrix a lot), but it would be nice to have this wrapped up nicely for use directly on the Vsketch object:

        @staticmethod
        def text(vsk: vsketch.Vsketch, x, y, text, text_size, font):
            stroke_layer = vsk._cur_stroke if vsk._cur_stroke is not None else 1
            center = vsk._transform_line(np.array([complex(x, y)]))[0]
            vsk.vpype(
                f"text -l {stroke_layer} -s {text_size} -p {center.real} {center.imag} -a center -f {font} '{text}'"
            )
    

    This feels pretty hacky, so I don't know if there's a nicer way of achieving the same using the vpype Python API.

    opened by lenary 6
  • add dependencies necessary for building docs

    add dependencies necessary for building docs

    Description

    While working on #305 I needed to install several packages in order to build the docs. This adds those packages to the dev dependencies.

    Checklist

    • [X] feature/fix implemented
    • [X] mypy returns no error
    • [X] tests added/updated and pytest --runslow succeeds
    • [X] documentation added/updated and building with no error (make clean && make html in docs/)
    • [ ] ~examples added/updated~ (not applicable)
    • [X] code formatting ok (black and isort)
    opened by bleything 5
  • Problems importing library (cli.result_callback seems to be undefined)

    Problems importing library (cli.result_callback seems to be undefined)

    I have troubles importing the library using Python 3.9 within a Miniconda environment. After installation (using the approach from prettymaps) and creating a new environment I try to import vsketch which gives the following stack trace:

    $ conda create -n default
    $ conda activate default
    $ pip install git+https://github.com/abey79/vsketch#egg=vsketch
    $ python3.9 -c 'import vsketch'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vsketch/__init__.py", line 3, in <module>
        from .sketch_class import Param, ParamType, SketchClass
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vsketch/sketch_class.py", line 10, in <module>
        from .vsketch import Vsketch
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vsketch/vsketch.py", line 22, in <module>
        import vpype_cli
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vpype_cli/__init__.py", line 5, in <module>
        from .blocks import *
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vpype_cli/blocks.py", line 7, in <module>
        from .cli import BlockProcessor, cli, execute_processors
      File "/home/user/.miniconda3/envs/default/lib/python3.9/site-packages/vpype_cli/cli.py", line 126, in <module>
        @cli.result_callback()
    TypeError: 'NoneType' object is not callable
    

    Here's a more detailed log of trying to import vsketch using ipython.

    Since I couldn't find anything in the issue tracker: Is the libary compatible with Python 3.9?

    opened by flxai 5
  • Save sketch parameters in svg source tag on like

    Save sketch parameters in svg source tag on like

    Description

    Adds a feature to store the sketch parameters (and the seed! see #87) in the svg source tag when saving using the LIKE button. The format is designed to be the same what is found in config json files.

    Sometimes I save things with a good set of parameters, but then I make a change to the sketch with a syntax error and loose my nice config.

    Checklist

    • [x] feature/fix implemented
    • [x] mypy returns no error
    • [x] tests added/updated and pytest --runslow succeeds
    • [ ] documentation added/updated and building with no error (make clean && make html in docs/)
    • [ ] examples added/updated
    • [x] code formatting ok (black and isort)
    opened by tyehle 4
  • Closing the UI does not stop vsk process

    Closing the UI does not stop vsk process

    Hey! Testing out the vsketch examples and I'm not able to exit without doing kill <pid>. Using the X in the UI closes the UI but the vsk process is still running. Is this expected?

    Here's a dump of what py-spy thinks is going on after I've closed the UI.

    Process 18062: /home/burk/dev/plotting/venv3/bin/python /home/burk/dev/plotting/venv3/bin/vsk run examples/random_lines
    Python v3.9.12 (/usr/bin/python3.9)
    
    Thread 18062 (idle): "MainThread"
        _shutdown (threading.py:1470)
    Thread 18082 (idle): "AnyIO worker thread"
        wait (threading.py:312)
        get (queue.py:171)
        run (anyio/_backends/_asyncio.py:744)
        _bootstrap_inner (threading.py:973)
        _bootstrap (threading.py:930)
    
    opened by burk 4
  • unify svg output codepaths

    unify svg output codepaths

    Over in #344 we're talking about changing the way we save parameters into the generated SVG, and I discovered that there are currently (at least) two ways to save an svg: first, via the GUI by clicking the Like button, and second via the command line with vsk save.

    Those two features use separate codepaths. The GUI uses DocumentSaverThread while the CLI uses _write_output, an inner function of the CLI's save function. Ultimately they both call vpype's write_svg method, but they arrive there by different paths.

    @abey79 said: "I think all save methods (like, vsk save) should lead to the same result." I agree, so I wanted to open this issue to discuss how we get there. My opinion is that I think it should be a method SketchClass, or Vsketch if that makes more sense. The thread and the CLI should have minimal logic around saving, just calling the upstream method.

    I'm happy to put in a PR for this, I just wanted to have a clear plan first.

    opened by bleything 0
  • save params in svg as json

    save params in svg as json

    Description

    This reworks #327 to store the parameters in json rather than a serialized python dict. This allows for safer parsing without needing to eval python. It also refactors the save thread to pass the entire sketch object in so the thread can handle all the parsing/generating logic locally.

    The only potential downside is that the quote marks in json are entity encoded in the svg, so it's quite a bit less readable for humans.

    Before:

    $ grep dc:source before.svg
            <dc:source>Vsketch with params {'__seed__': 330354623, 'units': 'in', 'paper_size': '10.5x14.8cm', 'landscape': False, 'centered': True, 'margin': 0.09999999999999996, 'fill_pen': 'Gelly Roll Metallic', 'stroke_pen': 'Sharpie Fine Point', 'show_layout': False, 'show_sublayout': False, 'vpype_preview': True, 'rows': 5, 'columns': 3, 'cell_padding': 0.1, 'radius_percent': 0.08, 'jitter_percent': 1.0, 'line_shorten_max': 0.2, 'ball_count': 3}
    

    After:

    $ grep dc:source after.svg
            <dc:source>{&quot;units&quot;: &quot;in&quot;, &quot;paper_size&quot;: &quot;10.5x14.8cm&quot;, &quot;landscape&quot;: false, &quot;centered&quot;: true, &quot;margin&quot;: 0.2, &quot;fill_pen&quot;: &quot;Gelly Roll Metallic&quot;, &quot;stroke_pen&quot;: &quot;Sharpie Fine Point&quot;, &quot;show_layout&quot;: true, &quot;show_sublayout&quot;: true, &quot;vpype_preview&quot;: false, &quot;rows&quot;: 1, &quot;columns&quot;: 1, &quot;cell_padding&quot;: 0.1, &quot;radius_percent&quot;: 0.08, &quot;jitter_percent&quot;: 1.0, &quot;line_shorten_max&quot;: 0.2, &quot;ball_count&quot;: 3, &quot;__seed__&quot;: 0}</dc:source>
    

    Personally I think this is a small price to pay for easier programmatic extraction but I'd like to hear what @tyehle thinks.

    Checklist

    • [x] feature/fix implemented
    • [x] mypy returns no error
    • [x] tests added/updated and pytest --runslow succeeds
    • [ ] documentation added/updated and building with no error (make clean && make html in docs/)
    • [ ] examples added/updated
    • [x] code formatting ok (black and isort)
    opened by bleything 13
  • Dashed Lines

    Dashed Lines

    Is there a method, or any easy way to create dashed lines out of paths? Would be nice if you could draw an ellipse (or other primitive) and specify the dash intervals and then add it to a shape object.

    opened by rachase 3
  • unable to zoom with mousewheel on macos

    unable to zoom with mousewheel on macos

    tl;dr: I can't figure out how to zoom using a mouse on my mac. You can use pinch/spread gestures on the trackpad but with an external mouse the scroll wheels pan and no combination of modifier keys seems to change that. Curiously, on windows I'm unable to pan, all wheel/modifier combos zoom.

    macos 12.4 on an m1 mac logitech mx master 3

    I'm happy to look into fixing this but I have no idea where to start. Any pointers would be appreciated!

    opened by bleything 0
  • Add the possibility to customise the python path

    Add the possibility to customise the python path

    This should be done via an additional option to vsk, with the corresponding environment variable. This is cleaner than manually setting the PYTHONPATH env variable, which would affect all python scripts.

    Relevant conversation: https://discord.com/channels/499297341472505858/748589023731122277/1039912787159302226

    image
    opened by abey79 0
Img-to-ascii-art - Converter of image to ascii art

img-to-ascii-art Converter of image to ascii art Latest Features. Intoducing Col

null 1 Dec 31, 2021
Ascify-Art - An easy to use, GUI based and user-friendly colored ASCII art generator from images!

Ascify-Art This is a python based colored ASCII art generator for free! How to Install? You can download and use the python version if you want, modul

Akash Bora 14 Dec 31, 2022
Samila is a generative art generator written in Python

Samila is a generative art generator written in Python, Samila let's you create arts based on many thousand points. The position of every single point is calculated by a formula, which has random parameters. Because of the random numbers, every image looks different.

Sepand Haghighi 947 Dec 30, 2022
Using P5.js, Processing and Python to create generative art

Experiments in Generative Art Using Python, Processing, and P5.js Quick Links Daily Sketches March 2021. | Gallery | Repo | Done using P5.js Genuary 2

Ram Narasimhan 33 Jul 6, 2022
Combinatorial image generator for generative NFT art.

ImageGen Stitches multiple image layers together into one image. Run usage: stitch.py [-h] <backgrounds_dir> <dinos_dir> <traits_dir> <texture_file> <

Dinosols NFT 19 Sep 16, 2022
A python program to generate ANSI art from images and videos

ANSI Art Generator A python program that creates ASCII art (with true color support if enabled) from images and videos Dependencies The program runs u

Pratyush Kumar 12 Nov 8, 2022
Python Digital Art Generator

Python Digital Art Generator The main goal of this repository is to generate all possible layers permutations given by the user in order to get unique

David Cuentas Mar 3 Mar 12, 2022
👾 Python project to help you convert any image into a pixel art.

?? Pixel Art Generator Python project to help you convert any image into a pixel art. ⚙️ Developer's Guide Things you need to get started with this co

Atul Anand 6 Dec 14, 2022
Computer art based on quadtrees.

Quads Computer art based on quadtrees. The program targets an input image. The input image is split into four quadrants. Each quadrant is assigned an

Michael Fogleman 1.1k Dec 23, 2022
Convert Image to ASCII Art

Convert Image to ASCII Art Persiapan aplikasi ini menggunakan bahasa python dan beberapa package python. oleh karena itu harus menginstall python dan

Huda Damar 48 Dec 20, 2022
Convert any image into greyscale ASCII art.

Image-to-ASCII Convert any image into greyscale ASCII art.

Ben Smith 12 Jan 15, 2022
Computer art based on joining transparent images

Computer Art There is no must in art because art is free. Introduction The following tutorial exaplains how to generate computer art based on a series

Computer Art 12 Jul 30, 2022
Pixel art as well as various sets for hand crafting

Pixel art as well as various sets for hand crafting

null 1 Nov 9, 2021
Art directed cropping, useful for responsive images

Art direction sets a focal point and can be used when you need multiple copies of the same Image but also in in different proportions.

Daniel 1 Aug 16, 2022
Generate waves art for an image

waves-art Generate waves art for an image. Requirements: OpenCV Numpy Example Usage python waves_art.py --image_path tests/test1.jpg --patch_size 15 T

Hamza Rawal 18 Apr 4, 2022
An ascii art generator that's actually good. Does edge detection and selects the most appropriate characters.

Ascii Artist An ascii art generator that's actually good. Does edge detection and selects the most appropriate characters. Installing Installing with

null 18 Jan 3, 2023
A python based library to help you create unique generative images based on Rarity for your next NFT Project

Generative-NFT Generate Unique Images based on Rarity A python based library to help you create unique generative images based on Rarity for your next

Kartikay Bhutani 8 Sep 21, 2022
CropImage is a simple toolkit for image cropping, detecting and cropping main body from pictures.

CropImage is a simple toolkit for image cropping, detecting and cropping main body from pictures. Support face and saliency detection.

Haofan Wang 15 Dec 22, 2022
㊙️ Create standard barcodes with Python. No external dependencies. 100% Organic Python.

python-barcode python-barcode provides a simple way to create barcodes in Python. There are no external dependencies when generating SVG files. Pillow

Hugo Barrera 419 Dec 26, 2022