Introduction

Valora arrow-up-rightis 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 palettearrow-up-right!)

  • 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 docsarrow-up-right 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:

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!

Last updated

Was this helpful?