Files
forge-steel/README.md
T
2025-11-03 21:47:14 +01:00

4.9 KiB

CI

F.O.R.G.E. (Steel)

Fusion Of Real Time Generative Effects

Steel version (linux executable)

TODO

Install

Prerequisites

  • libglfw
  • libGL
  • libasound2
  • libv4l

From release

See Releases

tar xvzf forge-steel-x.y.z.tar.gz
cd forge-steel-x.y.z
./configure
make
make install

From repository (PKGBUILD)

git clone --recursive https://github.com/klemek/forge-steel
cd forge
makepkg -si

From repository (dev version)

git clone --recursive https://github.com/klemek/forge-steel
cd forge
aclocal
autoconf
automake --add-missing
./configure
make
make install

CLI arguments

usage: forge [-h] [-v] [-hr] [-s=SCREEN] [-m=SCREEN] [-mo] [-f=DIR_PATH] [-c=CFG_PATH] [-sf=STATE_PATH] [-ls / -nls] [-ss / -nss] [-is=SIZE] [-v=FILE] [-vs=SIZE] [-t=TEMPO] [--demo] [-w] 

Fusion Of Real-time Generative Effects.

options:
  -h, --help                show this help message and exit
  -v, --version             print version
  -hr, --hot-reload         hot reload of shaders scripts
  -s, --screen              output screen number (default: primary)
  -m, --monitor             monitor screen number (default: none)
  -mo, --monitor-only       no output screen
  -f, --frag                fragment shaders directory (default: /usr/share/forge/shaders)
  -c, --config              fragment shaders config file (default: /usr/share/forge/default.cfg)
  -sf, --state-file         saved state file (default: forge_saved_state.txt)
  -ls, --load-state         load saved state (default)
  -nls, --no-load-state     do not load saved state
  -ss, --save-state         save state (default)
  -nss, --no-save-state     do not save state
  -is, --internal-size      internal texture height (default: 720)
  -v, --video-in            path to video capture device (multiple allowed)
  -vs, --video-size         video capture desired height (default: internal texture height)
  -t, --tempo               base tempo (default: 60)
  --demo                    demonstration mode (assume --no-save-state and --no-load-state)
  -w, --windowed            not fullscreen
  --trace-midi              print midi code and values
  --trace-fps               print fps status of subsystems

Release guide

# make full build
make -f Makefile.dev release-1.0.0
# push release
git push origin master --tags
# create release from tag on github
# attach .tar.gz to the github release
make -f Makefile.dev release-arch
# attach .pkg.tar.zst to the github release

Roadmap

  • Basics
    • Create GLSL Window
    • Load static fragment shader into GLSL
    • Add default uniforms
    • Read fragment shader from file
    • Handle compilation errors
    • Minimal working fragment sample
    • Hot-reload fragment shader (with arg)
    • Specify fragment shader path
    • Force fullscreen
    • Select screen as argument / config
    • fps in window title
    • Clean code
  • Multi-stage shaders
    • Test 2 stages with render to texture
    • 2 in 2 fx 1 mix 1 fx layout
    • Include common code
    • 16 input + 16 fx definition and selection (with const param)
    • Feedback texture
    • Shaders config file
      • uniform config
      • fragment config
      • subroutines config
    • demo mode
    • random seed injected into shaders
    • internal texture size for speed
    • pass state as uniform
    • debug shader (and in monitor)
    • random mode / demo mode with R/D key
    • Clean code and fix things
  • Midi
    • Read Midi events
    • Read midi mapping config file
    • Write Midi events
    • Send midi data to shaders
    • Save midi state
    • Load midi state from last save
    • State machine with A/B switch
    • Tap-tempo feature
    • Clean code and fix things
  • Video input
    • Fixed camera video
    • Pass video info to shaders
    • Sub process video reading
    • Shader based format mapping
    • Video mapping config file
    • Get first video size matching internal size
    • Other internal size for video
    • Pass input fps into shaders for debug
    • Clean code and fix things
  • Monitor screen
    • 2nd window
    • Use buffers as panels (INA A FXA / DEBUG A+B FXA+B / INB B FXB)
    • Clean code and fix things
    • Share openGL state between monitor and screen
  • Other
    • Update readme with usage documentation
    • Documentation in default config file
    • Clone "shaders" and config in system path at setup
    • Find and fix opengl errors 0500 ?
    • Investigate video device fps loss (bad unregister ?)
  • Bonus
    • Record show as text files
    • Play from record text file
    • Try to write NanoKontrol config