Visual Assembly Canvas - Ideas

  • Runs on WebAssembly
  • Alternative project names: stack machine blocks, visual stack machines
  • WebMIDI
  • Machine orchestrator in Rust
  • Similar to Shenzhen I/O and TIS-3D in terms of assembly and node system.
  • Create a MIDI interface
  • Create plotter block for plotting values over time.
  • Right Click > Context Menu. Open Settings, Reset Block, Disconnect All
  • Create an oscillator.
  • Interactions across computation models and languages. eg. functional meets procedural
    • Contenders: AGC Assembly, Uxntal, x86-like Register Machine, Lisp/Scheme
  • Frameworks for adding new languages and blocks
  • More visual things!
  • UI overhaul to be prettier (e.g. TurboRepo-style diagram borders?)
  • Hardware interactions
  • Memory inspection feature. Uses offset pagination.
    • e.g. read_stack(offset, size)
  • Debuggers and wiretaps
  • Full Command Palette
  • Type to create new blocks, similar to how Max MSP and PureData work. Clicking on top breaks the flow.
  • Time travelling: Visual Assembly Canvas - Time Travelling
  • Create a sampler and synthesizer
  • Web Audio API. Create oscillator and synth. Expose a simple API akin to Music Pi.
  • Build synthesizers with parametric control, Similar to Pure Data and Max MSP.
  • Layering music into a canvas, where there is light blocks, note blocks, external midi send to control.
  • Run my virtual stack machine on WebGPU in WASM using WGPU (definitely impossible)
  • Maybe we can promote as "creative ways to learn Assembly by programming on an infinite canvas", in similar ways to Scratch.
  • Run a neural network??????
  • 2D and 3D graphics renderer on Virtual Stack Machine
  • Compile WASM or other languages to Poom's instruction sets
  • 3D Assembler Game and Visualizer. Multiple Machines (TIS-3D).
  • Visual Assembly Canvas Copilot - have human conversations, and the AI suggests assembly code and modules, might be a great helper!
  • Visual Assembly Canvas x Algorave Copilot. Generate sounds from MuseNet -> OpenAI -> Convert to VAC code and modules -> add those diffs over time -> WebMIDI/OSC/SuperCollider
  • Refactor to use the same update() methods
  • Try out structs instead of enums for bindgen typings - not sure if trait objects work as Box::new is needed