Create evolving artistic images with hot-code-reloaded Lisp and GLSL.

Related tags

lisp glsl shader reload
Overview

shadergarden

Shadergarden is a tool for building hot-code-reloadable shader pipelines. For a tutorial for how to get started, consult the introductory blog post or the shadergarden lisp language documentation.

Usage

Once you've installed shadergarden via cargo install shadergarden, test to see that it is installed properly by running:

shadergarden --help

This should print out some usage information. To create a new project, run:

shadergarden new path/to/project

This will create a new example project in the specified directory. To run a shadergarden, cd into the directory of a project and run:

shadergarden run

This should open a new window and start running your graph. Don't close the window if you want to make changes; instead, open the project in an editor of your choice - the graph will update on save.

If a build error is encountered while reloading, shadergarden will log the error and continue executing the old graph.

Fancier Usage

You can pass input images and videos to shadergarden using the -i flag. This flag takes a list of paths to photos/videos - you must pass the same number of input photos/videos as the number of (input ...)s specified in shader.graph.

Once you've got a nice shadergarden, to render out a png sequence, use the render subcommand. This subcommand works exactly the same as run, but requires an output directory. To render the game of life demo out into a gif, run:

mkdir out
shadergarden render demos/life -o out -s 30 -e 430
ffmpeg -i "out/frame-%4d.png" -framerate 30 life.gif

You should see something like this (it might be a little fancier):

Happy hacking!

Issues
  • Fix raymarch render.frag on MacOS

    Fix raymarch render.frag on MacOS

    @slightknack please review

    I tried running every demo on an intel macbook (MacOS 11.5.2). Only the raymarch demo didn't work but it only required a few changes to work.

    • A #version 140 was needed at the top of render.frag
    • out vec4 out_color; is used instead of gl_FragColor
    • A local variable box was defined, which clobbered the box function and gave compiler errors when trying to call box() further down the line.
    opened by bschwind 1
  • update glium and notify dependencies

    update glium and notify dependencies

    The glium author published a new version, thanks to @strohel's request!

    opened by mcginty 1
  • README: fix `LISP.md` link

    README: fix `LISP.md` link

    null

    opened by mcginty 0
  • Public release checklist

    Public release checklist

    • [x] Upstreamed glium PR is cut into release, see https://github.com/glium/glium/pull/1956#issuecomment-913591646
    • [x] Create an initial release version and tag on GitHub
    • [x] cargo publish
    • [x] Change repo visibility to public
    • [x] Publish blog post
    opened by mcginty 0
  • Create LICENSE

    Create LICENSE

    null

    opened by slightknack 0
  • macOS (M1): AGX limit exceeded warning

    macOS (M1): AGX limit exceeded warning

    $ shadergraph run
    [info] Built initial graph
    [info] Starting...
    AGX: exceeded compiled variants footprint limit
    

    The application doesn't crash, and I didn't notice any specific issues, so it may just be a spurious issue that works itself out.

    opened by mcginty 1
  • Moving mouse in macOS (M1 Air) causes framerate increase

    Moving mouse in macOS (M1 Air) causes framerate increase

    https://user-images.githubusercontent.com/373823/132156917-39c852a9-f4d3-4495-8003-c14e9deb71f0.mp4

    opened by mcginty 1
Releases(v0.2.0)
  • v0.2.0(Sep 8, 2021)

    This release addresses a few comments brought up after the initial release. The largest issue was the working title shadergraph, which we've decided to rename to shadergarden.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Sep 7, 2021)

    This is the initial release of shadergraph; currently supports glium as a backend. See the README or the blog post for more info! Can be installed with cargo via cargo install shadergraph

    Source code(tar.gz)
    Source code(zip)
⚡️Lightning-fast linter for .env files. Written in Rust 🦀

⚡️ Lightning-fast linter for .env files. Written in Rust ?? Dotenv-linter can check / fix / compare .env files for problems that may cause the applica

null 1.2k Sep 15, 2021
a freeform Rust build system

tinyrick: a freeform Rust build system .---. ^ o{__ω__ o{ ^0^ -Let me out! ~~ ( // *|* \xx\) xx`|' = =

Andrew 43 Sep 3, 2021
memflow based dxgi screen mirror prototype

memflow-mirror work in progress framebuffer mirror based on memflow. Installation Compile the guest-agent on Windows with: cargo build --release --bin

null 16 Sep 5, 2021
🤖 Just a command runner

just just is a handy way to save and run project-specific commands. (非官方中文文档,这里,快看过来!) Commands, called recipes, are stored in a file called justfile

Casey Rodarmor 3.4k Sep 10, 2021
🎭 A CLI task runner defined by a simple markdown file

mask is a CLI task runner which is defined by a simple markdown file. It searches for a maskfile.md in the current directory which it then parses for

Jake Deichert 557 Sep 14, 2021
Rust Code Completion utility

Racer - code completion for Rust RACER = Rust Auto-Complete-er. A utility intended to provide Rust code completion for editors and IDEs. Maybe one day

null 3.3k Sep 13, 2021
:rocket: Automatic crate publishing done right

semantic-rs The purpose of this tool is to help people to publish crates following the semver specification. Right now if you're building a new crate

semantic-rs 165 Sep 3, 2021
Detects usage of unsafe Rust in a Rust crate and its dependencies.

cargo-geiger ☢️ A program that lists statistics related to the usage of unsafe Rust code in a Rust crate and all its dependencies. This cargo plugin w

Rust Secure Code Working Group 824 Sep 9, 2021
The open source design documentation tool for everybody

Heads up: reimagining artifact 3.0, check it out at artifact_py Artifact: design documentation for everybody Note: this project, and the python re-wri

Rett Berg 561 Aug 23, 2021
The Git Commit Message and Changelog Generation Framework :book:

git-journal ?? The Git Commit Message and Changelog Generation Framework Table of contents: TL;DR Installation Usage Default output Template output Co

Sascha Grunert 496 Sep 9, 2021
A web service that generates images of dependency graphs for crates hosted on crates.io

crate-deps A web service that generates images of dependency graphs for crates hosted on crates.io This project is built entirely in Rust using these

Corey Farwell 20 Nov 9, 2020
Generate beautiful changelogs from your Git commit history

clog-cli A conventional changelog for the rest of us About clog creates a changelog automatically from your local git metadata. See the clogs changelo

Clog 721 Sep 13, 2021
A tool that uses the credentials stored in 1password as an environment variable.

openv A tool that uses the credentials stored in 1password as an environment variable. Requirements 1password command-line tool Getting Started # Sign

mrtc0 18 Apr 12, 2021
Format Rust code

rustfmt Quick start On the Stable toolchain On the Nightly toolchain Installing from source Usage Running cargo fmt Running rustfmt directly Verifying

The Rust Programming Language 3.8k Sep 13, 2021
A fun and simple language with NO classes whatsoever!

This language aims to be simple, minimal, and compact. There will not be any classes whatsoever, and importing other files should be painless.

Europa Lang 19 Aug 27, 2021
Create ctags/etags for a cargo project

rusty-tags A command line tool that creates tags - for source code navigation by using ctags - for a cargo project, all of its direct and indirect dep

Daniel Trstenjak 326 Sep 9, 2021
🧑🏻‍⚕️ Command-line utility which poll on remote addresses in order to perform status checks periodically

ナース (Nāsu) ????‍⚕️ Command-line utility which poll on remote addresses in order to perform status checks periodically Motivation Nāsu (from Japanese ナ

Esteban Borai 12 Aug 11, 2021
A scaffolding CLI

CRISPR ?? crispr is a CLI tool allowing to scaffold a project from a template with a .crispr.{toml,json} configuration file. The template uses tokens

Yoav Lavi 18 Sep 4, 2021
discord bot for uwuifying text

uwubot This crate defines a discord bot using serenity for uwuifying text via uwuify. Installation You can install uwubot from source or from crates.i

Jane Lusby 33 Aug 14, 2021