"you africans, please listen to me as africans
and you non-africans, listen to me with open mind"
- install rust: https://www.rust-lang.org/tools/install
- install bevy dependencies: https://bevyengine.org/learn/quick-start/getting-started/setup/#installing-os-dependencies
- clone quartz
git clone https://github.com/tomara-x/quartz.git
- build it
cd quartz
cargo run --release
when you open quartz, it will be an empty window. there's 3 modes:
- edit: (default) interact with entities and execute commands (press
e
oresc
) - draw: draw new circles (press
d
) - connect: connect circles (press
c
)- target: target an entity from another (hold
t
in connect mode)
- target: target an entity from another (hold
(you can separate commands with ;
to run more than one command at once)
:e
edit (open) a scene file (in the assets path and without extension):w
write(save) a scene file (same)
:w moth // will save the current scene as the file "assets/moth.scn.ron" (OVERWRITES)
:e moth // will try to open the file "assets/moth.scn.ron" if it's there
these can take an optional entity id
:set n 4v0 42 // will set the num of entity 4v0 to 42
:set n 42 // will set the num values of selected entities to 42
:set n
set the num value of selected entities:set r
set radius:set x
set x position:set y
set y position:set z
set z position (this controls depth. what's in front of what):set h
set hue value [0...360]:set s
set saturation [0...1]:set l
set lightness [0...1]:set a
set alpha [0...1]:set v
set number of vertices (3 or higher):set o
or:set rot
or:set rotation
set rotation [-pi...pi]:set op
set op (use shortcuto
):set ord
or:set order
set order (use[
and]
to increment/decrement order):set arr
or:set array
set the array (space separated, no commas!):set tar
or:set targets
set targets (space separated id's) (if nothing is selected, the first entity gets the rest of the list as its targets):tsel
target selected (:tsel 4v2
sets selected entities as targets of entity 4v2):push
push a number to the array, or an id to the targets array:dv
set default number of vertices of drawn circles:dc
set default color of drawn circles
:lt
set link type of hole (use shortcutl
):ht
toggle open a white hole (by id):q
exit
d
go to draw modec
go to connect mode
(what happens when dragging selected entities, or when arrow keys are pressed)
exclusive:
ee
drag nothing (default)et
drag translation (move entity)er
drag radiusen
drag numbereh
drag huees
drag saturationel
drag lightnessea
drag alphaeo
drag rotationev
drag vertices
add a drag mode: (to drag multiple properties at the same time)
Et
add translationEr
add radiusEn
add numEh
add hueEs
add saturationEl
add lightnessEa
add alphaEo
add rotationEv
add vertices
ht
toggle open status
o
shortcut for:set op
l
shortcut for:lt
II
spawn info texts for selected entitiesIC
clear info textsID
show/hide entity id in visible info texts
(information about the selected entities)
ii
entity id'sin
number valuesira
radius valuesix
x positioniy
y positioniz
z positionih
hue valueis
saturationil
lightnessial
alphaiv
verticesiro
rotationior
orderiop
opiar
arrayit
targetsiL
hole link typeiO
white hole open status
audio unit info:
ni
number of inputsno
number of outputsnp
info about the unit
sa
select allsc
select all circlessh
select all holessg
select holes of the selected circles<delete>
delete selected entities<shift>+<delete>
will only delete selected connectionsyy
copy selection to clipboardp
paste copied
note: when drag-selecting, holding alt
will only select circles (ignores holes), holding ctrl
will only select holes (ignores circles), and holding shift
will add to the selection
vc
toggle circle visibilityvb
toggle black hole visibilityvw
toggle white hole visibilityva
toggle arrow visibilityvv
show all
quartz
shhh!
any connection links 2 circles together in some way. the black hole is taking some data from the source circle, and the white hole is getting that data and feeding it to the sink circle. the link type determines what that data is.
n
or-1
: numr
or-2
: radiusx
or-3
: x positiony
or-4
: y positionz
or-5
: z positionh
or-6
: hues
or-7
: saturationl
or-8
: lightnessa
or-9
: alphav
or-11
: verticeso
or-12
: rotationA
or-13
: arrayT
or-14
: targets0
usually means audio network (or nothing) generally a 0 to 0 connection is gonna do nothing, but when connecting networks, the black hole is type 0, and the white hole is type (positive number)
every circle has an order (0 or higher). things in order 0 do nothing.
each frame, every circle with a positive order gets processed (does whatever its op defines) this processing happens.. you guessed it, in order
we process things breadth-first. so when a circle is processed, all its inputs must have their data ready (they processed in this frame) to make sure that's the case, their order has to be lower than that of the circle reading their data...
lower order processes first, and the higher the order, the later that circle processes (within the same frame)
unless...
todo!();
todo!();
todo!();
- tools / dependencies:
- rust https://github.com/rust-lang/rust
- bevy https://github.com/bevyengine/bevy
- bevy_pancam https://github.com/johanhelsing/bevy_pancam
- bevy-inspector-egui https://github.com/jakobhellermann/bevy-inspector-egui/
- fundsp https://github.com/SamiPerttu/fundsp
- cpal https://github.com/rustaudio/cpal
- assert_no_alloc https://github.com/Windfisch/rust-assert-no-alloc
- copypasta https://github.com/alacritty/copypasta
- serde https://github.com/serde-rs/serde
- bevy_github_ci_template https://github.com/bevyengine/bevy_github_ci_template
- tracy https://github.com/wolfpld/tracy
- vim https://github.com/vim/vim
- void linux https://voidlinux.org/
- learning / inspiration / used for a while:
- network https://github.com/JustMog/Mog-VCV
- csound https://csound.com
- faust https://faust.grame.fr
- plugdata https://github.com/plugdata-team/plugdata
- bevy-cheatbook: https://github.com/bevy-cheatbook/bevy-cheatbook
- knyst https://github.com/ErikNatanael/knyst
- shadplay https://github.com/alphastrata/shadplay
- rust-ants-colony-simulation https://github.com/bones-ai/rust-ants-colony-simulation
- bevy_fundsp https://github.com/harudagondi/bevy_fundsp
- bevy_kira_audio https://github.com/NiklasEi/bevy_kira_audio
- crossbeam https://github.com/crossbeam-rs/crossbeam
- bevy_mod_picking https://github.com/aevyrie/bevy_mod_picking/
- bevy_vector_shapes https://github.com/james-j-obrien/bevy_vector_shapes
- anyhow https://github.com/dtolnay/anyhow
quartz is free and open source. all code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.