Skip to content

giraffekey/xylo

Repository files navigation

Xylo   License Build Status Latest Version Docs

Xylo is a domain specific language of the functional paradigm that is designed for use in creative coding and procedural art.

Documentation: https://xylo-1.gitbook.io/docs

example

Example

root =
    l 0 FILL : ss 400 bouquet

quality = 750

bouquet =
    r 36 (ss 1.3 flower5)
    : r 15 flower6

flower6 =
    demiflower6
    : flip 90 demiflower6

flower5 =
    demiflower5
    : flip 90 demiflower5

demiflower6 =
    collect (
        for i in 0..12
            r (i * 30) (petal6 quality))

demiflower5 =
    collect (
        for i in 0..5
            r (i * 72) (petal5 quality))

petal5 i =
    if i == 0
        EMPTY
    else
        s 1 0.0001 SQUARE
        : ss 0.005 (tx -0.5 (l 0 CIRCLE))
        : tx 0.5 (r 144.04 (ss 0.998 (tx 0.5 (lshift (1 / quality * 0.6) (petal5 (i - 1))))))

petal6 i =
    if i == 0
        EMPTY
    else
        s 1 0.0001 SQUARE
        : tx -0.5 (ss 0.01 (l 0 CIRCLE))
        : tx 0.5 (r 120.21 (ss 0.996 (tx 0.5 (lshift (1 / quality) (petal6 (i - 1))))))

Installation

Released Builds

You can find the latest release of the Xylo binaries here.

Cargo Install

You can install Xylo using Cargo:

cargo install xylo-lang

Manual Build (Linux)

Clone the repo:

git clone https://github.com/giraffekey/xylo

Build the repo:

cargo build --release

Copy the CLI:

sudo cp target/release/xylo-lang /usr/bin/xylo

Usage

Write some Xylo code in a .xylo file e.g. art.xylo.

Then, generate an image from that code:

xylo generate art.xylo --width 800 --height 800

If your code is valid, you should see an image output to art.png.

Community and Support

Join our community and stay connected! You can reach out to us through the following platforms:

  • Discord: Join our Discord server to share your art, discuss ideas, and collaborate on the the project.
  • Telegram: Join our Telegram group for real-time updates and discussions.
  • Reddit: Visit our subreddit to participate in discussions, share your artwork, and connect with other community members.
  • Donations: If you appreciate our work and would like to support us, consider donating through Liberapay or Giveth. Your contributions help us continue improving the project!