Skip to content
A framework for algorithmic art. TypeScript first. Make drawing concepts part of framework. Make APIs for humans.
TypeScript JavaScript CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows GH CI Sep 15, 2019
samples fix sample screenshot Aug 1, 2019
src 0.14.0 (#29) Dec 29, 2019
.gitignore lots of things, address feedbback Jul 31, 2019
.prettierrc Initial commit from gatsby: (https://github.com/gatsbyjs/gatsby-start… Jul 29, 2019
LICENSE
README.md Update README.md Nov 4, 2019
assets.sketch 0.8.0 (#18) Sep 16, 2019
extract-source.js simple path to (curvy) path and examples Aug 17, 2019
gatsby-browser.js Initial commit from gatsby: (https://github.com/gatsbyjs/gatsby-start… Jul 29, 2019
gatsby-config.js icon, work around ls? Jul 29, 2019
gatsby-node.js Initial commit from gatsby: (https://github.com/gatsbyjs/gatsby-start… Jul 29, 2019
gatsby-ssr.js Initial commit from gatsby: (https://github.com/gatsbyjs/gatsby-start… Jul 29, 2019
jest.config.js
package.json 0.14.0 (#29) Dec 29, 2019
pre-publish.js
tailwind.config.js some stuff working locally Jul 29, 2019
tiles.png some stuff working locally Jul 29, 2019
tsconfig.json some stuff working locally Jul 29, 2019
yarn.lock Yet another attempt to resolve deps issue (#28) Dec 29, 2019

README.md

Solandra

Principles

Opionated, agile (code is easy to change) framework for algorithmic art. See my essays for research/plans that went into this!

  • Sketches always have width 1, height depends on aspect ratio.
  • Angles in radians.
  • Points are [number, number].
  • Colours in hsl(a).
  • Leverage TypeScript: you shouldn't need to learn much, autocomplete and type checking should have your back.
  • Not for beginners.
  • Control flow at level of drawing (tiling, partitions etc).
  • Few dependencies/mostly from scratch.
  • Performance is not the goal.
  • Common algorthmic art things (e.g. randomness) should be easy.
  • Should feel fun/powerful.
  • Life is too short to compile things.
  • Rethink APIs e.g. standard bezier curve APIs make absolutely no sense
  • Declarative when possible (especially anything configuration-y), procedural when pragmatic; make it easy to explore/change your mind.

Examples

Get Started

Or if you want to play, install gatsby cli, clone this repo and start by

yarn
gatsby develop

Then open http://localhost:8000 and in your editor sketches.ts and try things out. It does things like the below

A simple example drawn with tiles

p.forTiling({ n: 20, margin: 0.1, type: "square" }, ([x, y], [dX, dY]) => {
  p.lineStyle = { cap: "round" }
  p.proportionately([
    [
      1,
      () => {
        p.setStrokeColour(120 + x * 120, 90 - 20 * y, 40)
        p.drawLine([x, y], [x + dX, y + dY])
      },
    ],
    [
      2,
      () => {
        p.setStrokeColour(120 + x * 120, 90 - 20 * y, 40)
        p.drawLine([x + dX, y], [x, y + dY])
      },
    ],
  ])
})

An example

An example

An example

An example

You can’t perform that action at this time.