Skip to content

leifericf/eido

Repository files navigation

Eido

An end-to-end Clojure toolkit for generative artists — from REPL sketch to screen, print, and plotter.

Eido is a declarative, data-first library for generative art. You describe images as plain data — maps, vectors, keywords — and render the same scene to whatever medium you're working in: raster PNG, animated GIF or SVG, archival TIFF for print, or motion-stream formats — stroke-only SVG, DXF, GRBL G-code, and HPGL — for pen plotters, CNC, lasers, and CAD.

Eido is an art tool, not a charting library — it was designed around the practice of generative artists, plotter artists, and edition makers. Data visualization is possible, but a dedicated charting library will serve you better there.

Particle galaxy Op art Ink landscape

Rainbow tentacles Spiral rainbow grid Stained glass

Gallery · Docs · API Reference

Design

This project has been on my mind since I discovered Clojure in 2020. As a graphics nerd, describing images as plain data — not issuing drawing commands — felt like the natural thing to build.

The approach is inspired by Christian Johansen's Replicant, which showed how far a minimal, data-first approach to rendering can go. Eido applies that thinking to image generation — 2D shapes, 3D scenes, and animations alike.

  • Images are values. A scene is a plain Clojure map — printable, serializable, diffable. Nothing opaque.
  • One function. render takes a scene (or a sequence of scenes) and produces output. That's the API.
  • Description, not instruction. You declare what the image contains; eido decides how to draw it.
  • Animations are sequences. 60 frames = 60 maps in a vector. No timeline, no keyframes, no mutation.
  • 3D sculpting pipeline. Composable mesh→mesh operations: deform, extrude, subdivide, mirror — all pure data, all chainable via ->.
  • 2D↔3D bridge. The same field/noise/palette vocabulary works in both dimensions. UV-mapped procedural textures, normal maps, and specular maps connect 2D generative tools to 3D surfaces.
  • Non-photorealistic rendering. Hatch and stipple patterns from 2D applied to 3D faces with lighting-driven density.
  • Particle simulation. Physics-based effects configured as data — emitters, forces, and lifetime curves.
  • Typography as paths. Text compiled to vector paths — compatible with gradients, transforms, 3D extrusion.
  • Procedural fills. Noise-driven, field-based, and programmatic fills described entirely as data — no shaders, no GPU.
  • Semantic IR. A rich middle layer preserves visual intent — fills, effects, transforms, generators — before lowering to drawing instructions.
  • No state, no framework. Every function takes data and returns data. You bring your own workflow.
  • Zero dependencies. Just Clojure and the standard library.

If it cannot be represented as plain data, it probably should not be in the library.

Installation

See the Getting Started guide on the website.

Quick Start

Requires Clojure 1.12+ and Java 11+.

(require '[eido.core :as eido])

(eido/render
  {:image/size [400 400]
   :image/background [:color/rgb 245 243 238]
   :image/nodes
   [{:node/type :shape/circle
     :circle/center [200 200]
     :circle/radius 120
     :style/fill [:color/rgb 200 50 50]}]}
  {:output "circle.png"})

See the full documentation for shapes, text, colors, gradients, transforms, animation, particles, 3D, and more.

Gallery

The gallery showcases examples across several categories — 2D scenes, 3D scenes, mixed 2D/3D, particles, typography, and artistic expression — each with source code.

The gallery scenes and the site that renders them live in their own repository: leifericf/eido-site. That repo depends on a tagged release of this library and rebuilds on every push.

Running Tests

clj -X:test

Status

Beta — The core API is stabilizing. Breaking changes may still occur between releases, but the fundamentals are in place.

About

Data-driven 2D & 3D graphics for Clojure — shapes, animation, lighting, and compositing from data. Pure Clojure; zero dependencies.

Topics

Resources

License

Stars

Watchers

Forks

Contributors