Introduction

Valora is a brush for generative fine art. With valora you can write visual compositions that

  • are repeatable with rng seeds managed for you

  • can be reproduced at arbitrary resolutions without changing the scale of the composition

  • have strict type-safe color semantics that won't surprise you in print (thanks to palette!)

  • leverage all of your hardware (You can shade each path with a different fragment shader!)

  • you will rarely have to debug, thanks to Rust!

This guide covers valora in depth, but to start let's see some pixels! Keep the docs open to follow along.

cargo new art --bin && cd art
cargo install cargo-edit && cargo add valora

Put the following in your main.rs:

use valora::prelude::*;
fn main() -> Result<()> {
run_fn(Options::from_args(), |_gpu, world, _rng| {
Ok(move |ctx: Context, canvas: &mut Canvas| {
canvas.set_color(LinSrgb::new(1., 1., 1.));
canvas.paint(Filled(ctx.world));
let max_radius = world.width / 3.;
let radius = ctx.time.as_secs_f32().cos().abs() * max_radius;
canvas.set_color(LinSrgb::new(1., 0., 0.));
canvas.paint(Filled(Ellipse::circle(world.center(), radius)));
})
})
}

Now execute:

cargo run --release

The first time, compilation will take a while. When valora starts, you should see a window with a red circle oscillating in size.

Your first valora result!