agentvfx 0.0.0-stage → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/GEMINI.md +1 -0
- package/LICENSE +202 -0
- package/README.md +228 -2
- package/package.json +35 -4
- package/skills/agentvfx/LICENSE +202 -0
- package/skills/agentvfx/NOTICE +50 -0
- package/skills/agentvfx/SKILL.md +90 -0
- package/skills/agentvfx/engine/core/constants.mjs +84 -0
- package/skills/agentvfx/engine/core/flash-constants.mjs +23 -0
- package/skills/agentvfx/engine/core/flash.mjs +240 -0
- package/skills/agentvfx/engine/core/mark.mjs +25 -0
- package/skills/agentvfx/engine/core/palettes.mjs +36 -0
- package/skills/agentvfx/engine/core/schedule.mjs +85 -0
- package/skills/agentvfx/engine/core/templates.mjs +43 -0
- package/skills/agentvfx/engine/core/util.mjs +167 -0
- package/skills/agentvfx/engine/core/validate.mjs +334 -0
- package/skills/agentvfx/engine/node/analysis.mjs +172 -0
- package/skills/agentvfx/engine/node/audio.mjs +621 -0
- package/skills/agentvfx/engine/node/board.mjs +24 -0
- package/skills/agentvfx/engine/node/chrome.mjs +349 -0
- package/skills/agentvfx/engine/node/encode.mjs +110 -0
- package/skills/agentvfx/engine/node/eye.mjs +77 -0
- package/skills/agentvfx/engine/node/footage.mjs +129 -0
- package/skills/agentvfx/engine/node/frame-worker.mjs +39 -0
- package/skills/agentvfx/engine/node/host.mjs +31 -0
- package/skills/agentvfx/engine/node/job.mjs +181 -0
- package/skills/agentvfx/engine/node/png.mjs +112 -0
- package/skills/agentvfx/engine/node/render.mjs +161 -0
- package/skills/agentvfx/engine/node/stage-capture.mjs +187 -0
- package/skills/agentvfx/engine/node/stage-serve.mjs +72 -0
- package/skills/agentvfx/engine/node/stills.mjs +100 -0
- package/skills/agentvfx/engine/node/ws-server.mjs +132 -0
- package/skills/agentvfx/engine/web/gl.mjs +319 -0
- package/skills/agentvfx/engine/web/glsl-common.mjs +78 -0
- package/skills/agentvfx/engine/web/init.js +23 -0
- package/skills/agentvfx/engine/web/prelude.mjs +150 -0
- package/skills/agentvfx/engine/web/render.html +11 -0
- package/skills/agentvfx/engine/web/render.mjs +388 -0
- package/skills/agentvfx/engine/web/scale.mjs +15 -0
- package/skills/agentvfx/engine/web/text.mjs +158 -0
- package/skills/agentvfx/plates/terminalcore/README.md +61 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/crt.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/font.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/gallery.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/gallery_mats.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/gallery_room.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/materials.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/nodekit.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/room.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/shots.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/textures.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/__pycache__/wall.cpython-313.pyc +0 -0
- package/skills/agentvfx/plates/terminalcore/crt.py +143 -0
- package/skills/agentvfx/plates/terminalcore/font.py +80 -0
- package/skills/agentvfx/plates/terminalcore/gallery.py +61 -0
- package/skills/agentvfx/plates/terminalcore/gallery_mats.py +144 -0
- package/skills/agentvfx/plates/terminalcore/gallery_room.py +126 -0
- package/skills/agentvfx/plates/terminalcore/materials.py +170 -0
- package/skills/agentvfx/plates/terminalcore/nodekit.py +87 -0
- package/skills/agentvfx/plates/terminalcore/room.py +82 -0
- package/skills/agentvfx/plates/terminalcore/scene.py +219 -0
- package/skills/agentvfx/plates/terminalcore/shots.py +48 -0
- package/skills/agentvfx/plates/terminalcore/textures.py +79 -0
- package/skills/agentvfx/plates/terminalcore/wall.py +103 -0
- package/skills/agentvfx/references/plates.md +22 -0
- package/skills/agentvfx/references/template-format.md +149 -0
- package/skills/agentvfx/references/web.md +63 -0
- package/skills/agentvfx/runtime/agentvfx.js +708 -0
- package/skills/agentvfx/schemas/fx-score.schema.json +98 -0
- package/skills/agentvfx/scripts/export-web.mjs +157 -0
- package/skills/agentvfx/scripts/loop.mjs +129 -0
- package/skills/agentvfx/scripts/make-beat.mjs +133 -0
- package/skills/agentvfx/scripts/plate.mjs +82 -0
- package/skills/agentvfx/scripts/vfx.mjs +173 -0
- package/skills/agentvfx/templates/_test/feedback-counter/fx.json +11 -0
- package/skills/agentvfx/templates/_test/feedback-counter/main.frag +4 -0
- package/skills/agentvfx/templates/_test/feedback-counter/pass0.frag +4 -0
- package/skills/agentvfx/templates/_test/gradient/fx.json +23 -0
- package/skills/agentvfx/templates/_test/gradient/main.frag +5 -0
- package/skills/agentvfx/templates/_test/identity/fx.json +10 -0
- package/skills/agentvfx/templates/_test/identity/main.frag +4 -0
- package/skills/agentvfx/templates/_test/strobe/fx.json +14 -0
- package/skills/agentvfx/templates/_test/strobe/main.frag +6 -0
- package/skills/agentvfx/templates/_test/text-probe/fx.json +15 -0
- package/skills/agentvfx/templates/_test/text-probe/main.frag +6 -0
- package/skills/agentvfx/templates/brutal/NOTES.md +14 -0
- package/skills/agentvfx/templates/brutal/_src/boot-log/def.mjs +57 -0
- package/skills/agentvfx/templates/brutal/_src/boot-log/main.src.frag +129 -0
- package/skills/agentvfx/templates/brutal/_src/build.mjs +33 -0
- package/skills/agentvfx/templates/brutal/_src/halftone-field/def.mjs +72 -0
- package/skills/agentvfx/templates/brutal/_src/halftone-field/main.src.frag +94 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/deck-left.src.glsl +100 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/deck-right.src.glsl +61 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/deck-tiles.src.glsl +153 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/def.mjs +82 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/main.src.frag +110 -0
- package/skills/agentvfx/templates/brutal/_src/hud-deck/pass0.src.frag +38 -0
- package/skills/agentvfx/templates/brutal/_src/shared/defs.mjs +28 -0
- package/skills/agentvfx/templates/brutal/_src/shared/icons.glsl +72 -0
- package/skills/agentvfx/templates/brutal/_src/shared/lib.glsl +115 -0
- package/skills/agentvfx/templates/brutal/_src/shared/screen.glsl +43 -0
- package/skills/agentvfx/templates/brutal/boot-log/demo-acid.json +1 -0
- package/skills/agentvfx/templates/brutal/boot-log/demo-phosphor.json +1 -0
- package/skills/agentvfx/templates/brutal/boot-log/demo-ultramarine.json +1 -0
- package/skills/agentvfx/templates/brutal/boot-log/fx.json +257 -0
- package/skills/agentvfx/templates/brutal/boot-log/main.frag +242 -0
- package/skills/agentvfx/templates/brutal/collage/_src/00-lib.glsl +73 -0
- package/skills/agentvfx/templates/brutal/collage/_src/10-spectrum-scope.glsl +73 -0
- package/skills/agentvfx/templates/brutal/collage/_src/20-meter-readout-cross.glsl +87 -0
- package/skills/agentvfx/templates/brutal/collage/_src/30-footage-fillers.glsl +92 -0
- package/skills/agentvfx/templates/brutal/collage/_src/40-editorial.glsl +232 -0
- package/skills/agentvfx/templates/brutal/collage/_src/50-typefx.glsl +163 -0
- package/skills/agentvfx/templates/brutal/collage/_src/60-scene-lib.glsl +104 -0
- package/skills/agentvfx/templates/brutal/collage/_src/61-scene-specimen.glsl +71 -0
- package/skills/agentvfx/templates/brutal/collage/_src/62-scene-wiring.glsl +96 -0
- package/skills/agentvfx/templates/brutal/collage/_src/63-scene-fieldcut.glsl +119 -0
- package/skills/agentvfx/templates/brutal/collage/_src/64-scene-pattern.glsl +64 -0
- package/skills/agentvfx/templates/brutal/collage/_src/641-scene-anatomy.glsl +49 -0
- package/skills/agentvfx/templates/brutal/collage/_src/642-scene-deck.glsl +78 -0
- package/skills/agentvfx/templates/brutal/collage/_src/643-scene-bootlog.glsl +60 -0
- package/skills/agentvfx/templates/brutal/collage/_src/644-scene-tunnel.glsl +48 -0
- package/skills/agentvfx/templates/brutal/collage/_src/645-scene-runner.glsl +42 -0
- package/skills/agentvfx/templates/brutal/collage/_src/646-scene-ascii.glsl +66 -0
- package/skills/agentvfx/templates/brutal/collage/_src/647-scene-cubewall.glsl +80 -0
- package/skills/agentvfx/templates/brutal/collage/_src/648-scene-vortex.glsl +46 -0
- package/skills/agentvfx/templates/brutal/collage/_src/649-scene-sticker.glsl +72 -0
- package/skills/agentvfx/templates/brutal/collage/_src/65-scene-main.glsl +1 -0
- package/skills/agentvfx/templates/brutal/collage/_src/650-scene-ribbon.glsl +55 -0
- package/skills/agentvfx/templates/brutal/collage/_src/651-scene-slab.glsl +38 -0
- package/skills/agentvfx/templates/brutal/collage/_src/652-scene-framedial.glsl +79 -0
- package/skills/agentvfx/templates/brutal/collage/_src/653-scene-tilt.glsl +40 -0
- package/skills/agentvfx/templates/brutal/collage/_src/654-scene-marquee.glsl +45 -0
- package/skills/agentvfx/templates/brutal/collage/_src/655-scene-lens.glsl +57 -0
- package/skills/agentvfx/templates/brutal/collage/_src/656-scene-liquid.glsl +35 -0
- package/skills/agentvfx/templates/brutal/collage/_src/657-scene-panelgrid.glsl +75 -0
- package/skills/agentvfx/templates/brutal/collage/_src/658-scene-mirror.glsl +49 -0
- package/skills/agentvfx/templates/brutal/collage/_src/66-scene-main.glsl +27 -0
- package/skills/agentvfx/templates/brutal/collage/_src/90-main.glsl +120 -0
- package/skills/agentvfx/templates/brutal/collage/_src/build.mjs +24 -0
- package/skills/agentvfx/templates/brutal/collage/_src/sync-presets.mjs +16 -0
- package/skills/agentvfx/templates/brutal/collage/demo-bone-lime.json +1 -0
- package/skills/agentvfx/templates/brutal/collage/demo-lime-sparse.json +1 -0
- package/skills/agentvfx/templates/brutal/collage/demo-orange-dense.json +1 -0
- package/skills/agentvfx/templates/brutal/collage/demo-ultra-slow.json +1 -0
- package/skills/agentvfx/templates/brutal/collage/fx.json +4882 -0
- package/skills/agentvfx/templates/brutal/collage/layout.mjs +97 -0
- package/skills/agentvfx/templates/brutal/collage/layouts.json +366 -0
- package/skills/agentvfx/templates/brutal/collage/main.frag +2367 -0
- package/skills/agentvfx/templates/brutal/collage/pass0.frag +265 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-acid.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-ascii.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-dither.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-orange.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-phosphor.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/demo-ultramarine.json +1 -0
- package/skills/agentvfx/templates/brutal/halftone-field/fx.json +474 -0
- package/skills/agentvfx/templates/brutal/halftone-field/main.frag +248 -0
- package/skills/agentvfx/templates/brutal/hud-deck/demo-acid.json +1 -0
- package/skills/agentvfx/templates/brutal/hud-deck/demo-night.json +1 -0
- package/skills/agentvfx/templates/brutal/hud-deck/demo-octagon.json +1 -0
- package/skills/agentvfx/templates/brutal/hud-deck/demo-ultramarine.json +1 -0
- package/skills/agentvfx/templates/brutal/hud-deck/fx.json +601 -0
- package/skills/agentvfx/templates/brutal/hud-deck/main.frag +645 -0
- package/skills/agentvfx/templates/brutal/hud-deck/pass0.frag +38 -0
- package/skills/agentvfx/templates/brutal/lattice/demo-cobalt-fine.json +1 -0
- package/skills/agentvfx/templates/brutal/lattice/demo-ink-yellow.json +1 -0
- package/skills/agentvfx/templates/brutal/lattice/demo-vermilion.json +1 -0
- package/skills/agentvfx/templates/brutal/lattice/demo-violet-slow.json +1 -0
- package/skills/agentvfx/templates/brutal/lattice/fx.json +130 -0
- package/skills/agentvfx/templates/brutal/lattice/main.frag +175 -0
- package/skills/agentvfx/templates/brutal/lattice/pass0.frag +29 -0
- package/skills/agentvfx/templates/glitch/block-glitch/demo-mosaic.json +1 -0
- package/skills/agentvfx/templates/glitch/block-glitch/demo-onset.json +1 -0
- package/skills/agentvfx/templates/glitch/block-glitch/demo-static.json +1 -0
- package/skills/agentvfx/templates/glitch/block-glitch/demo-tear.json +1 -0
- package/skills/agentvfx/templates/glitch/block-glitch/fx.json +54 -0
- package/skills/agentvfx/templates/glitch/block-glitch/main.frag +132 -0
- package/skills/agentvfx/templates/glitch/block-glitch/pass0.frag +12 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/NOTES.md +13 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/build-passes.mjs +162 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/demo-chunk.json +1 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/demo-hue.json +1 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/demo-kick.json +1 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/demo-streak.json +1 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/demo-vertical.json +1 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/fx.json +60 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/main.frag +83 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass0.frag +64 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass1.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass2.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass3.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass4.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass5.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass6.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass7.frag +66 -0
- package/skills/agentvfx/templates/glitch/pixel-sort/pass8.frag +66 -0
- package/skills/agentvfx/templates/glitch/rgb-split/demo-diagonal-stutter.json +1 -0
- package/skills/agentvfx/templates/glitch/rgb-split/demo-hard.json +1 -0
- package/skills/agentvfx/templates/glitch/rgb-split/demo-kick.json +1 -0
- package/skills/agentvfx/templates/glitch/rgb-split/demo-radial.json +1 -0
- package/skills/agentvfx/templates/glitch/rgb-split/fx.json +46 -0
- package/skills/agentvfx/templates/glitch/rgb-split/main.frag +76 -0
- package/skills/agentvfx/templates/glitch/vhs/demo-clean.json +1 -0
- package/skills/agentvfx/templates/glitch/vhs/demo-crash.json +1 -0
- package/skills/agentvfx/templates/glitch/vhs/demo-tape.json +1 -0
- package/skills/agentvfx/templates/glitch/vhs/demo-worn.json +1 -0
- package/skills/agentvfx/templates/glitch/vhs/fx.json +46 -0
- package/skills/agentvfx/templates/glitch/vhs/main.frag +96 -0
- package/skills/agentvfx/templates/impact/impact-1bit/demo-onebit-bayer.json +1 -0
- package/skills/agentvfx/templates/impact/impact-1bit/fx.json +45 -0
- package/skills/agentvfx/templates/impact/impact-1bit/main.frag +64 -0
- package/skills/agentvfx/templates/impact/impact-invert/demo-invert-snap.json +1 -0
- package/skills/agentvfx/templates/impact/impact-invert/fx.json +37 -0
- package/skills/agentvfx/templates/impact/impact-invert/main.frag +44 -0
- package/skills/agentvfx/templates/impact/punch-shake/demo-punch-hard.json +1 -0
- package/skills/agentvfx/templates/impact/punch-shake/fx.json +36 -0
- package/skills/agentvfx/templates/impact/punch-shake/main.frag +62 -0
- package/skills/agentvfx/templates/impact/rgb-hit/demo-rgb-slam.json +1 -0
- package/skills/agentvfx/templates/impact/rgb-hit/fx.json +39 -0
- package/skills/agentvfx/templates/impact/rgb-hit/main.frag +62 -0
- package/skills/agentvfx/templates/impact/signal-cut/demo-lime-hold.json +1 -0
- package/skills/agentvfx/templates/impact/signal-cut/demo-lime.json +1 -0
- package/skills/agentvfx/templates/impact/signal-cut/demo-orange.json +1 -0
- package/skills/agentvfx/templates/impact/signal-cut/demo-ultramarine.json +1 -0
- package/skills/agentvfx/templates/impact/signal-cut/fx.json +83 -0
- package/skills/agentvfx/templates/impact/signal-cut/main.frag +101 -0
- package/skills/agentvfx/templates/impact/signal-cut/pass0.frag +68 -0
- package/skills/agentvfx/templates/impact/speedline-burst/demo-speed-white.json +1 -0
- package/skills/agentvfx/templates/impact/speedline-burst/fx.json +44 -0
- package/skills/agentvfx/templates/impact/speedline-burst/main.frag +68 -0
- package/skills/agentvfx/templates/impact/strobe-burst/demo-strobe-white-16.json +1 -0
- package/skills/agentvfx/templates/impact/strobe-burst/fx.json +42 -0
- package/skills/agentvfx/templates/impact/strobe-burst/main.frag +43 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/demo-anamorphic-cinema.json +10 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/demo-data.json +10 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/fx.json +47 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/main.frag +45 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/pass0.frag +22 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/pass1.frag +16 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/pass2.frag +16 -0
- package/skills/agentvfx/templates/light/anamorphic-streak/pass3.frag +16 -0
- package/skills/agentvfx/templates/light/bloom-glow/demo-clip01-low.json +11 -0
- package/skills/agentvfx/templates/light/bloom-glow/demo-neon-night.json +10 -0
- package/skills/agentvfx/templates/light/bloom-glow/demo-phosphor.json +11 -0
- package/skills/agentvfx/templates/light/bloom-glow/fx.json +53 -0
- package/skills/agentvfx/templates/light/bloom-glow/main.frag +85 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass0.frag +21 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass1.frag +50 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass2.frag +44 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass3.frag +32 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass4.frag +48 -0
- package/skills/agentvfx/templates/light/bloom-glow/pass5.frag +46 -0
- package/skills/agentvfx/templates/light/god-rays/demo-golden-hour.json +10 -0
- package/skills/agentvfx/templates/light/god-rays/demo-point-lamp.json +10 -0
- package/skills/agentvfx/templates/light/god-rays/fx.json +39 -0
- package/skills/agentvfx/templates/light/god-rays/main.frag +54 -0
- package/skills/agentvfx/templates/light/lens-flare/demo-clip01-bar.json +11 -0
- package/skills/agentvfx/templates/light/lens-flare/demo-eye-bar.json +10 -0
- package/skills/agentvfx/templates/light/lens-flare/demo-sun-ghosts.json +10 -0
- package/skills/agentvfx/templates/light/lens-flare/fx.json +49 -0
- package/skills/agentvfx/templates/light/lens-flare/main.frag +86 -0
- package/skills/agentvfx/templates/light/lens-flare/pass0.frag +24 -0
- package/skills/agentvfx/templates/light/light-leak/demo-slit.json +10 -0
- package/skills/agentvfx/templates/light/light-leak/demo-vintage-burn.json +10 -0
- package/skills/agentvfx/templates/light/light-leak/fx.json +40 -0
- package/skills/agentvfx/templates/light/light-leak/main.frag +46 -0
- package/skills/agentvfx/templates/light/light-stage/fx.json +29 -0
- package/skills/agentvfx/templates/light/light-stage/main.frag +56 -0
- package/skills/agentvfx/templates/light/light-sweep/demo-hard-bar.json +12 -0
- package/skills/agentvfx/templates/light/light-sweep/demo-logo-sweep.json +10 -0
- package/skills/agentvfx/templates/light/light-sweep/demo-onset.json +11 -0
- package/skills/agentvfx/templates/light/light-sweep/fx.json +45 -0
- package/skills/agentvfx/templates/light/light-sweep/main.frag +29 -0
- package/skills/agentvfx/templates/light/light-sweep/pass0.frag +17 -0
- package/skills/agentvfx/templates/light/light-sweep/pass1.frag +15 -0
- package/skills/agentvfx/templates/light/neon-saber/demo-hairline.json +10 -0
- package/skills/agentvfx/templates/light/neon-saber/demo-saber-laser.json +10 -0
- package/skills/agentvfx/templates/light/neon-saber/fx.json +48 -0
- package/skills/agentvfx/templates/light/neon-saber/main.frag +27 -0
- package/skills/agentvfx/templates/light/neon-saber/pass0.frag +46 -0
- package/skills/agentvfx/templates/light/neon-saber/pass1.frag +15 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/demo-trail.json +1 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/fx.json +38 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/main.frag +19 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/pass0.frag +16 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/pass1.frag +20 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/pass2.frag +11 -0
- package/skills/agentvfx/templates/psychedelic/echo-flow/pass3.frag +4 -0
- package/skills/agentvfx/templates/psychedelic/hologram-scan/demo-cyan.json +1 -0
- package/skills/agentvfx/templates/psychedelic/hologram-scan/fx.json +36 -0
- package/skills/agentvfx/templates/psychedelic/hologram-scan/main.frag +30 -0
- package/skills/agentvfx/templates/psychedelic/kaleido-fold/demo-six.json +1 -0
- package/skills/agentvfx/templates/psychedelic/kaleido-fold/fx.json +37 -0
- package/skills/agentvfx/templates/psychedelic/kaleido-fold/main.frag +10 -0
- package/skills/agentvfx/templates/psychedelic/kaleido-fold/pass0.frag +34 -0
- package/skills/agentvfx/templates/psychedelic/mosh-melt/demo-classic.json +1 -0
- package/skills/agentvfx/templates/psychedelic/mosh-melt/fx.json +38 -0
- package/skills/agentvfx/templates/psychedelic/mosh-melt/main.frag +20 -0
- package/skills/agentvfx/templates/psychedelic/mosh-melt/pass0.frag +22 -0
- package/skills/agentvfx/templates/psychedelic/sacred/NOTES.md +13 -0
- package/skills/agentvfx/templates/psychedelic/sacred/demo-classic.json +1 -0
- package/skills/agentvfx/templates/psychedelic/sacred/demo-halo.json +1 -0
- package/skills/agentvfx/templates/psychedelic/sacred/demo-slow-tide.json +1 -0
- package/skills/agentvfx/templates/psychedelic/sacred/demo-thermal.json +1 -0
- package/skills/agentvfx/templates/psychedelic/sacred/fx.json +263 -0
- package/skills/agentvfx/templates/psychedelic/sacred/main.frag +109 -0
- package/skills/agentvfx/templates/psychedelic/sacred/pass0.frag +25 -0
- package/skills/agentvfx/templates/psychedelic/sacred/pass1.frag +23 -0
- package/skills/agentvfx/templates/psychedelic/tidal-bands/demo-classic.json +1 -0
- package/skills/agentvfx/templates/psychedelic/tidal-bands/fx.json +37 -0
- package/skills/agentvfx/templates/psychedelic/tidal-bands/main.frag +54 -0
- package/skills/agentvfx/templates/scope/_chrome.glsl +242 -0
- package/skills/agentvfx/templates/scope/goniometer/demo-boot-green.json +1 -0
- package/skills/agentvfx/templates/scope/goniometer/demo-field-lime.json +1 -0
- package/skills/agentvfx/templates/scope/goniometer/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/scope/goniometer/demo-glow-phosphor.json +1 -0
- package/skills/agentvfx/templates/scope/goniometer/demo-hud-black.json +1 -0
- package/skills/agentvfx/templates/scope/goniometer/fx.json +635 -0
- package/skills/agentvfx/templates/scope/goniometer/main.frag +33 -0
- package/skills/agentvfx/templates/scope/goniometer/pass0.frag +58 -0
- package/skills/agentvfx/templates/scope/goniometer/pass1.frag +43 -0
- package/skills/agentvfx/templates/scope/goniometer/pass2.frag +12 -0
- package/skills/agentvfx/templates/scope/goniometer/pass3.frag +12 -0
- package/skills/agentvfx/templates/scope/goniometer/pass4.frag +12 -0
- package/skills/agentvfx/templates/scope/goniometer/pass5.frag +12 -0
- package/skills/agentvfx/templates/scope/goniometer/pass6.frag +251 -0
- package/skills/agentvfx/templates/scope/scope-polar/demo-boot-green.json +1 -0
- package/skills/agentvfx/templates/scope/scope-polar/demo-field-lime.json +1 -0
- package/skills/agentvfx/templates/scope/scope-polar/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/scope/scope-polar/demo-glow-phosphor.json +1 -0
- package/skills/agentvfx/templates/scope/scope-polar/demo-hud-black.json +1 -0
- package/skills/agentvfx/templates/scope/scope-polar/fx.json +686 -0
- package/skills/agentvfx/templates/scope/scope-polar/main.frag +39 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass0.frag +84 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass1.frag +49 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass2.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass3.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass4.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass5.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-polar/pass6.frag +251 -0
- package/skills/agentvfx/templates/scope/scope-triggered/demo-boot-green.json +1 -0
- package/skills/agentvfx/templates/scope/scope-triggered/demo-field-lime.json +1 -0
- package/skills/agentvfx/templates/scope/scope-triggered/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/scope/scope-triggered/demo-glow-phosphor.json +1 -0
- package/skills/agentvfx/templates/scope/scope-triggered/demo-hud-black.json +1 -0
- package/skills/agentvfx/templates/scope/scope-triggered/fx.json +712 -0
- package/skills/agentvfx/templates/scope/scope-triggered/main.frag +36 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass0.frag +78 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass1.frag +50 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass2.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass3.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass4.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass5.frag +12 -0
- package/skills/agentvfx/templates/scope/scope-triggered/pass6.frag +251 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/demo-boot-green.json +1 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/demo-field-lime.json +1 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/demo-glow-phosphor.json +1 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/demo-hud-black.json +1 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/fx.json +595 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/main.frag +83 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/pass0.frag +52 -0
- package/skills/agentvfx/templates/scope/spectrogram-scroll/pass1.frag +251 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/demo-boot-green.json +1 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/demo-field-lime.json +1 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/demo-glow-phosphor.json +1 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/demo-hud-black.json +1 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/fx.json +642 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/main.frag +33 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass0.frag +56 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass1.frag +44 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass2.frag +12 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass3.frag +12 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass4.frag +12 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass5.frag +12 -0
- package/skills/agentvfx/templates/scope/xy-phosphor/pass6.frag +251 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-linear/fx.src.json +61 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-linear/main.src.frag +112 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-linear/pass0.src.frag +2 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-mirror/fx.src.json +51 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-mirror/main.src.frag +72 -0
- package/skills/agentvfx/templates/spectrum/_src/bars-mirror/pass0.src.frag +2 -0
- package/skills/agentvfx/templates/spectrum/_src/bass-circle/fx.src.json +56 -0
- package/skills/agentvfx/templates/spectrum/_src/bass-circle/main.src.frag +136 -0
- package/skills/agentvfx/templates/spectrum/_src/bass-circle/pass0.src.frag +2 -0
- package/skills/agentvfx/templates/spectrum/_src/build.mjs +68 -0
- package/skills/agentvfx/templates/spectrum/_src/label-bars/fx.src.json +54 -0
- package/skills/agentvfx/templates/spectrum/_src/label-bars/main.src.frag +102 -0
- package/skills/agentvfx/templates/spectrum/_src/label-bars/pass0.src.frag +2 -0
- package/skills/agentvfx/templates/spectrum/_src/shared/bars-fn.glsl +64 -0
- package/skills/agentvfx/templates/spectrum/_src/shared/bars-pass.glsl +22 -0
- package/skills/agentvfx/templates/spectrum/_src/shared/clock.glsl +7 -0
- package/skills/agentvfx/templates/spectrum/_src/shared/hud.glsl +50 -0
- package/skills/agentvfx/templates/spectrum/_src/shared/stage.glsl +74 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-particles/fx.src.json +58 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-particles/main.src.frag +119 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-particles/pass0.src.frag +33 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-radial/fx.src.json +56 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-radial/main.src.frag +95 -0
- package/skills/agentvfx/templates/spectrum/_src/spectrum-radial/pass0.src.frag +2 -0
- package/skills/agentvfx/templates/spectrum/_src/waveform-line/fx.src.json +60 -0
- package/skills/agentvfx/templates/spectrum/_src/waveform-line/main.src.frag +98 -0
- package/skills/agentvfx/templates/spectrum/_src/waveform-line/pass0.src.frag +43 -0
- package/skills/agentvfx/templates/spectrum/bars-linear/demo-graph-acid.json +1 -0
- package/skills/agentvfx/templates/spectrum/bars-linear/demo-graph-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/bars-linear/fx.json +632 -0
- package/skills/agentvfx/templates/spectrum/bars-linear/main.frag +233 -0
- package/skills/agentvfx/templates/spectrum/bars-linear/pass0.frag +91 -0
- package/skills/agentvfx/templates/spectrum/bars-mirror/demo-field-acid.json +1 -0
- package/skills/agentvfx/templates/spectrum/bars-mirror/demo-field-ultramarine.json +1 -0
- package/skills/agentvfx/templates/spectrum/bars-mirror/fx.json +539 -0
- package/skills/agentvfx/templates/spectrum/bars-mirror/main.frag +193 -0
- package/skills/agentvfx/templates/spectrum/bars-mirror/pass0.frag +91 -0
- package/skills/agentvfx/templates/spectrum/bass-circle/demo-bracket-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/bass-circle/demo-bracket-ultramarine.json +1 -0
- package/skills/agentvfx/templates/spectrum/bass-circle/fx.json +552 -0
- package/skills/agentvfx/templates/spectrum/bass-circle/main.frag +258 -0
- package/skills/agentvfx/templates/spectrum/bass-circle/pass0.frag +91 -0
- package/skills/agentvfx/templates/spectrum/label-bars/demo-deck-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/label-bars/demo-deck-ultramarine.json +1 -0
- package/skills/agentvfx/templates/spectrum/label-bars/fx.json +552 -0
- package/skills/agentvfx/templates/spectrum/label-bars/main.frag +223 -0
- package/skills/agentvfx/templates/spectrum/label-bars/pass0.frag +91 -0
- package/skills/agentvfx/templates/spectrum/spectrum-particles/demo-cloud-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/spectrum-particles/demo-cloud-ultramarine.json +1 -0
- package/skills/agentvfx/templates/spectrum/spectrum-particles/fx.json +584 -0
- package/skills/agentvfx/templates/spectrum/spectrum-particles/main.frag +240 -0
- package/skills/agentvfx/templates/spectrum/spectrum-particles/pass0.frag +101 -0
- package/skills/agentvfx/templates/spectrum/spectrum-radial/demo-starburst-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/spectrum-radial/demo-starburst-ultramarine.json +1 -0
- package/skills/agentvfx/templates/spectrum/spectrum-radial/fx.json +566 -0
- package/skills/agentvfx/templates/spectrum/spectrum-radial/main.frag +217 -0
- package/skills/agentvfx/templates/spectrum/spectrum-radial/pass0.frag +91 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/demo-strip-acid.json +1 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/demo-strip-black.json +1 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/fx.json +481 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/main.frag +219 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/pass0.frag +48 -0
- package/skills/agentvfx/templates/spectrum/waveform-line/pass1.frag +86 -0
- package/skills/agentvfx/test/_render_light.mjs +38 -0
- package/skills/agentvfx/test/audio-stereo.test.mjs +45 -0
- package/skills/agentvfx/test/audio.test.mjs +257 -0
- package/skills/agentvfx/test/brutal.test.mjs +190 -0
- package/skills/agentvfx/test/concept-collage-layout.test.mjs +236 -0
- package/skills/agentvfx/test/concept-collage-scenes.test.mjs +305 -0
- package/skills/agentvfx/test/concept-collage-typefx.test.mjs +153 -0
- package/skills/agentvfx/test/concept-collage.test.mjs +84 -0
- package/skills/agentvfx/test/concept-lattice.test.mjs +133 -0
- package/skills/agentvfx/test/concept-signal-cut.test.mjs +172 -0
- package/skills/agentvfx/test/credit-overlay.test.mjs +58 -0
- package/skills/agentvfx/test/credit.test.mjs +54 -0
- package/skills/agentvfx/test/doctor.test.mjs +31 -0
- package/skills/agentvfx/test/encode.test.mjs +22 -0
- package/skills/agentvfx/test/fixtures/r7-collage-LAYOUTS.json +5780 -0
- package/skills/agentvfx/test/fixtures/score-bad-duration.json +7 -0
- package/skills/agentvfx/test/fixtures/score-bad-safety.json +8 -0
- package/skills/agentvfx/test/fixtures/score-identity-footage.json +8 -0
- package/skills/agentvfx/test/fixtures/score-missing-template.json +7 -0
- package/skills/agentvfx/test/fixtures/score-ok.json +8 -0
- package/skills/agentvfx/test/fixtures/score-strobe-12hz.json +8 -0
- package/skills/agentvfx/test/fixtures/score-text-probe.json +1 -0
- package/skills/agentvfx/test/flash-audit.test.mjs +150 -0
- package/skills/agentvfx/test/flash.test.mjs +83 -0
- package/skills/agentvfx/test/footage.test.mjs +88 -0
- package/skills/agentvfx/test/glitch.test.mjs +272 -0
- package/skills/agentvfx/test/impact.test.mjs +231 -0
- package/skills/agentvfx/test/imports.test.mjs +39 -0
- package/skills/agentvfx/test/light.test.mjs +200 -0
- package/skills/agentvfx/test/loop.test.mjs +80 -0
- package/skills/agentvfx/test/psychedelic.test.mjs +99 -0
- package/skills/agentvfx/test/render.test.mjs +73 -0
- package/skills/agentvfx/test/sacred.test.mjs +175 -0
- package/skills/agentvfx/test/schema.test.mjs +103 -0
- package/skills/agentvfx/test/scope.test.mjs +306 -0
- package/skills/agentvfx/test/spectrum.test.mjs +165 -0
- package/skills/agentvfx/test/text.test.mjs +142 -0
- package/skills/agentvfx/test/web.test.mjs +400 -0
- package/skills/agentvfx/test-media/SOURCES.md +39 -0
- package/skills/agentvfx/test-media/beat-132.mp3 +0 -0
- package/skills/agentvfx/test-media/clip-01.mp4 +0 -0
- package/skills/agentvfx/test-media/clip-02.mp4 +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Scene 12 (variant 2, rot 1), sticker-slap: a black field and a pile of cream stickers. Every beat a new sticker slaps on with an
|
|
2
|
+
// overshoot (scale 1.35, 1.12, 0.97, 1); the pile keeps the last eight. Every onset flips one sticker over to a 1-bit dither of the plate.
|
|
3
|
+
// Stickers are filled Impact words, outlined Impact words, round Georgia tags, dither plates and small mustard pills (mustard stays under
|
|
4
|
+
// about 15 percent); two rows of Impact text run along the top, filled and outlined in turn. Palette: ground (black), ink (cream),
|
|
5
|
+
// accent (mustard), tintA (lilac). Text set 13: r the sticker words (centred anchors), g the two rows.
|
|
6
|
+
vec2 stRot(vec2 p, float a) { float cs = cos(a); float sn = sin(a); return vec2(cs * p.x + sn * p.y, -sn * p.x + cs * p.y); }
|
|
7
|
+
|
|
8
|
+
vec4 stSticker(vec2 q, vec2 c, float j, float cut, float age, float A, float flipJ) {
|
|
9
|
+
vec2 h1 = hash22(vec2(j, 1.7));
|
|
10
|
+
vec2 h2 = hash22(vec2(j, 8.3));
|
|
11
|
+
vec2 pos = vec2(0.22 + (A - 0.44) * h1.x, 0.22 + 0.56 * h1.y);
|
|
12
|
+
float rot = (h2.x - 0.5) * 0.6;
|
|
13
|
+
float sz = 0.17 + 0.1 * h2.y;
|
|
14
|
+
int type = int(floor(hash12(vec2(j, 4.4)) * 5.0));
|
|
15
|
+
if (j == flipJ) { type = 3; }
|
|
16
|
+
float sc = 1.0;
|
|
17
|
+
if (j == cut) { sc = age < 0.5 ? 1.35 : (age < 1.5 ? 1.12 : (age < 2.5 ? 0.97 : 1.0)); }
|
|
18
|
+
vec2 p = stRot(c - pos, rot) / sc;
|
|
19
|
+
vec3 cream = inkColor.rgb;
|
|
20
|
+
vec3 blk = groundColor.rgb;
|
|
21
|
+
vec2 hs = vec2(sz, sz * 0.62);
|
|
22
|
+
float cov = 0.0;
|
|
23
|
+
vec3 f = cream;
|
|
24
|
+
float k = RENDERSIZE.y;
|
|
25
|
+
if (type == 2) {
|
|
26
|
+
cov = scAA(length(p) - sz * 0.8);
|
|
27
|
+
f = tintA.rgb;
|
|
28
|
+
float m = crisp(sheetC(vec2(0.25 * RENDERSIZE.x, 0.774 * k) + p * (0.34 * k / (sz * 0.8)), 0), 1.0);
|
|
29
|
+
f = mix(f, blk, m);
|
|
30
|
+
f = mix(f, blk, scLine(length(p) - sz * 0.68, 1.5));
|
|
31
|
+
} else if (type == 4) {
|
|
32
|
+
vec2 hm = vec2(sz * 0.55, sz * 0.3);
|
|
33
|
+
cov = scAA(sdBox(p, -hm, hm) - 0.03);
|
|
34
|
+
f = accentColor.rgb;
|
|
35
|
+
f = mix(f, blk, step(0.5, fract(p.x * 14.0)) * 0.9 * step(abs(p.y), hm.y * 0.5));
|
|
36
|
+
} else {
|
|
37
|
+
cov = scAA(sdBox(p, -hs, hs) - 0.03);
|
|
38
|
+
if (type == 0 || type == 1) {
|
|
39
|
+
vec2 anchor = type == 0 ? vec2(0.25 * RENDERSIZE.x, 0.252 * k) : vec2(0.75 * RENDERSIZE.x, 0.252 * k);
|
|
40
|
+
float m = crisp(sheetC(anchor + p * (0.34 * k / sz), 0), 1.0);
|
|
41
|
+
f = mix(f, blk, m);
|
|
42
|
+
}
|
|
43
|
+
if (type == 3) {
|
|
44
|
+
float px = scPx();
|
|
45
|
+
vec2 pix = floor(q / px);
|
|
46
|
+
float l = scTone((pix + 0.5) * px, (pos - hs) * scU, (pos + hs) * scU, 1.6, 0.05);
|
|
47
|
+
f = mix(blk, cream, step(scBayer(pix), l));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return vec4(f, cov);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void sceneSticker(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
54
|
+
vec2 c = q / scU;
|
|
55
|
+
float A = S.x / S.y;
|
|
56
|
+
float beat = floor(clk.x);
|
|
57
|
+
float cut = floor(beat * 0.5);
|
|
58
|
+
float age = mod(beat, 2.0) < 0.5 ? float(FRAMEINDEX) - clk.y : 9.0;
|
|
59
|
+
vec3 cream = inkColor.rgb;
|
|
60
|
+
col = groundColor.rgb;
|
|
61
|
+
// two rows of Impact text, filled then outlined
|
|
62
|
+
float rows = scSheet(q, 2);
|
|
63
|
+
col = mix(col, cream, rows * step(c.y, 0.17));
|
|
64
|
+
float flipJ = cut - mod(floor(clk.z / 3.0), 4.0);
|
|
65
|
+
for (int i = 7; i >= 0; i--) {
|
|
66
|
+
float j = cut - float(i);
|
|
67
|
+
vec4 s = stSticker(q, c, j, cut, age, A, flipJ);
|
|
68
|
+
col = mix(col, s.rgb, s.a);
|
|
69
|
+
}
|
|
70
|
+
col = mix(col, cream, max(scPlus(c, vec2(0.06, 0.94), 0.02), scPlus(c, vec2(A - 0.06, 0.94), 0.02)));
|
|
71
|
+
col = mix(col, cream, numTxt(q, vec2(A - 0.2, 0.9) * scU, scCell() * 2.0, mod(cut, 100.0), 2));
|
|
72
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// (the scene dispatcher is in 66-scene-main.glsl so it sorts after every scene file)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Scene 13 (variant 3, rot 1), ribbon-rays: an ochre field with a fan of white hairline rays (the ray count grows on every beat,
|
|
2
|
+
// every third ray is a thin wedge), and a twisted ribbon that crosses the frame: its front face is black with a heavy condensed word
|
|
3
|
+
// flowing along it (the flow steps on every beat), its back face is an ochre duotone of the plate; four echo copies trail behind in
|
|
4
|
+
// colour steps. One DIN Condensed label sits at the root of the rays. Palette: ground (ochre), ink (white), accent (black),
|
|
5
|
+
// tintA (dark ochre), tintB (pale ochre). Text set 14: r the ribbon line (Avenir Next Condensed), g the label.
|
|
6
|
+
float rbY(float x, float ph) { return 0.5 + 0.2 * sin(x * 2.6 + ph); }
|
|
7
|
+
float rbTw(float x) { return cos(x * 1.9 + 0.6); }
|
|
8
|
+
|
|
9
|
+
void sceneRibbon(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
10
|
+
vec2 c = q / scU;
|
|
11
|
+
float A = S.x / S.y;
|
|
12
|
+
vec3 white = inkColor.rgb;
|
|
13
|
+
vec3 blk = accentColor.rgb;
|
|
14
|
+
float cut = floor(clk.x);
|
|
15
|
+
col = groundColor.rgb;
|
|
16
|
+
// rays from the lower left, one more pair on every beat
|
|
17
|
+
vec2 ro = vec2(0.14, 0.9);
|
|
18
|
+
vec2 dr = c - ro;
|
|
19
|
+
float a = atan(dr.y, dr.x);
|
|
20
|
+
float nr = 6.0 + mod(cut, 14.0) * 2.0;
|
|
21
|
+
float ra = a * nr / 6.28318;
|
|
22
|
+
float da = (fract(ra) - 0.5) * 6.28318 / nr;
|
|
23
|
+
float ray = scLine(da * length(dr), 1.0);
|
|
24
|
+
float wedge = step(mod(floor(ra), 3.0), 0.5) * step(abs(da * length(dr)), 0.006 + 0.012 * length(dr));
|
|
25
|
+
col = mix(col, white, max(ray * 0.85, wedge * 0.9));
|
|
26
|
+
// the ribbon and its echoes, back to front
|
|
27
|
+
float flow = cut * 0.07;
|
|
28
|
+
for (int e = 4; e >= 0; e--) {
|
|
29
|
+
float fe = float(e);
|
|
30
|
+
float ph = cut * 0.35 - fe * 0.2;
|
|
31
|
+
float yy = rbY(c.x, ph) + fe * 0.03;
|
|
32
|
+
float tw = rbTw(c.x - fe * 0.08);
|
|
33
|
+
float wd = 0.02 + 0.11 * abs(tw);
|
|
34
|
+
float dy = c.y - yy;
|
|
35
|
+
float inside = scAA(abs(dy) - wd);
|
|
36
|
+
if (e > 0) {
|
|
37
|
+
vec3 ec = e == 4 ? tintA.rgb : (e == 3 ? tintB.rgb : (e == 2 ? blk : white));
|
|
38
|
+
col = mix(col, ec, scLine(abs(dy) - wd, 1.5) * 0.9);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
vec3 face;
|
|
42
|
+
if (tw > 0.0) {
|
|
43
|
+
float m = crisp(sheetC(vec2(fract(c.x * 0.45 + flow) * 0.96 * RENDERSIZE.x, (0.012 + (0.5 + 0.5 * dy / max(wd, 0.004)) * 0.07) * RENDERSIZE.y), 0), 1.0);
|
|
44
|
+
face = mix(blk, white, m);
|
|
45
|
+
} else {
|
|
46
|
+
float l = clamp((luma(scPlate(q, vec2(0.0), S)) - 0.05) * 1.8, 0.0, 1.0);
|
|
47
|
+
face = mix(blk, vec3(1.0, 0.82, 0.38), l);
|
|
48
|
+
}
|
|
49
|
+
col = mix(col, face, inside);
|
|
50
|
+
col = mix(col, white, scLine(abs(dy) - wd, 1.0) * 0.9);
|
|
51
|
+
}
|
|
52
|
+
col = mix(col, blk, scAA(length(c - ro) - 0.012));
|
|
53
|
+
col = mix(col, blk, scSheet(q, 1));
|
|
54
|
+
col = mix(col, blk, max(scPlus(c, vec2(A - 0.07, 0.08), 0.02), scPlus(c, vec2(0.45 * A, 0.94), 0.02)));
|
|
55
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Scene 14 (variant 4, rot 1), slab-shear: a concrete-grey field with a giant Futura word that flows on a sine wave (the wave steps on
|
|
2
|
+
// every beat) and is cut into nine horizontal slabs; on every beat some slabs slide sideways and two become safety-blue slabs holding
|
|
3
|
+
// the plate as a 1-bit Bayer dither with the word in white; a typed Menlo label sits on a seam, with a crosshair target and ticks.
|
|
4
|
+
// Palette: ground (concrete), ink (white), accent (safety blue), tintA (black). Text set 15: r the giant word, g the typed label.
|
|
5
|
+
void sceneSlab(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec3 blue = accentColor.rgb;
|
|
9
|
+
vec3 blk = tintA.rgb;
|
|
10
|
+
float cut = floor(clk.x);
|
|
11
|
+
float slab = floor(c.y / 0.1111);
|
|
12
|
+
float h = hash12(vec2(slab, cut));
|
|
13
|
+
float shift = (step(0.55, h) * (fract(h * 9.0) - 0.5)) * 0.2 * scU;
|
|
14
|
+
float isBlue = step(0.82, hash12(vec2(slab, cut + 31.0)));
|
|
15
|
+
float wave = 0.045 * sin(c.x * 7.0 + cut * 0.9) * scU;
|
|
16
|
+
float grain = fbm(c * 40.0, 3);
|
|
17
|
+
col = groundColor.rgb * (0.88 + 0.2 * grain);
|
|
18
|
+
vec2 sq = q + vec2(shift, wave);
|
|
19
|
+
float m = crisp(sheetC(sq * (RENDERSIZE / scS), 0), 1.0);
|
|
20
|
+
if (isBlue > 0.5) {
|
|
21
|
+
float px = scPx();
|
|
22
|
+
vec2 pix = floor(q / px);
|
|
23
|
+
float l = scTone((pix + 0.5) * px, vec2(0.0), S, 1.6, 0.05);
|
|
24
|
+
col = mix(blk, blue, step(scBayer(pix), l));
|
|
25
|
+
col = mix(col, inkColor.rgb, m);
|
|
26
|
+
} else {
|
|
27
|
+
col = mix(col, blk, m);
|
|
28
|
+
}
|
|
29
|
+
// seams between slabs and a typed label on one of them
|
|
30
|
+
float seam = scLine(fract(c.y / 0.1111 + 0.5) * 0.1111 - 0.0555, 1.0);
|
|
31
|
+
col = mix(col, blk, seam * 0.35);
|
|
32
|
+
col = mix(col, blk, step(mod(q.x, 0.03 * scU), 1.0) * step(abs(c.y - 0.2222), 0.008));
|
|
33
|
+
col = mix(col, blk, scSheet(q, 1));
|
|
34
|
+
vec2 t = vec2(A - 0.2, 0.5);
|
|
35
|
+
float rr = length(c - t);
|
|
36
|
+
col = mix(col, blk, max(scLine(rr - 0.09, 1.2), max(scLine(rr - 0.04, 1.0), max(scLine(c.x - t.x, 1.0) * step(abs(c.y - t.y), 0.12), scLine(c.y - t.y, 1.0) * step(abs(c.x - t.x), 0.12)))));
|
|
37
|
+
col = mix(col, blk, numTxt(q, vec2(0.04, 0.93) * scU, scCell() * 2.0, mod(cut * 14.0, 1000.0), 3));
|
|
38
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Scene 15 (variant 5, rot 1), frame-loop-dial: a dark aubergine field with a line of Georgia text that runs round the border of the
|
|
2
|
+
// frame (every onset jumps it ahead, a quick double speed); an arch window with the plate as a peach Bayer dither; a dial of 60 ticks
|
|
3
|
+
// filled up on every beat with a split-flap countdown in its middle (the top half of the old digit folds away in 3 frames); a typed Menlo
|
|
4
|
+
// input line. Palette: ground (aubergine), ink (off-white), accent (peach), tintA (plum). Text set 16: r the border line and the
|
|
5
|
+
// MesloLGS NF atlas, g the typed line.
|
|
6
|
+
float fdFlap(vec2 q, vec2 lo, vec2 sz, float oldD, float newD, float u) {
|
|
7
|
+
float fs = sz.y * 0.8;
|
|
8
|
+
vec2 org = lo + vec2((sz.x - 0.602 * fs) * 0.5, (sz.y - fs) * 0.5);
|
|
9
|
+
float mid = lo.y + 0.5 * sz.y;
|
|
10
|
+
vec2 pn = q - org * scU;
|
|
11
|
+
float dn = aNum(pn, fs * scU, newD, 1);
|
|
12
|
+
float dOld = 0.0;
|
|
13
|
+
float v = 0.0;
|
|
14
|
+
if (q.y >= mid * scU) {
|
|
15
|
+
v = u < 0.66 ? aNum(q - org * scU, fs * scU, oldD, 1) : dn;
|
|
16
|
+
} else {
|
|
17
|
+
float vis = 1.0 - u;
|
|
18
|
+
float yy = mid * scU - (mid * scU - q.y) / max(vis, 0.001);
|
|
19
|
+
if (u < 1.0 && (mid * scU - q.y) < 0.5 * sz.y * scU * vis) { v = aNum(vec2(q.x, yy) - org * scU, fs * scU, oldD, 1); }
|
|
20
|
+
else if (u < 1.0) { v = dn; }
|
|
21
|
+
else { v = dn; }
|
|
22
|
+
}
|
|
23
|
+
return crisp(v, 4.0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void sceneFrameDial(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
27
|
+
vec2 c = q / scU;
|
|
28
|
+
float A = S.x / S.y;
|
|
29
|
+
vec3 off = inkColor.rgb;
|
|
30
|
+
vec3 peach = accentColor.rgb;
|
|
31
|
+
vec3 plum = tintA.rgb;
|
|
32
|
+
float cut = floor(clk.x);
|
|
33
|
+
float age = float(FRAMEINDEX) - clk.y;
|
|
34
|
+
float u = cut < 0.5 ? 1.0 : clamp((age + 1.0) / 3.0, 0.0, 1.0);
|
|
35
|
+
col = groundColor.rgb;
|
|
36
|
+
// text round the border
|
|
37
|
+
float bnd = 0.055;
|
|
38
|
+
vec4 dd = vec4(c.y, A - c.x, 1.0 - c.y, c.x);
|
|
39
|
+
float mn = min(min(dd.x, dd.y), min(dd.z, dd.w));
|
|
40
|
+
float perim = 2.0 * A + 2.0;
|
|
41
|
+
float s;
|
|
42
|
+
float depth = mn;
|
|
43
|
+
if (mn == dd.x) { s = c.x; }
|
|
44
|
+
else if (mn == dd.y) { s = A + c.y; }
|
|
45
|
+
else if (mn == dd.z) { s = A + 1.0 + (A - c.x); }
|
|
46
|
+
else { s = 2.0 * A + 1.0 + (1.0 - c.y); }
|
|
47
|
+
float tflow = TIME * 0.06 * perim + clk.z * 0.06;
|
|
48
|
+
float k = RENDERSIZE.y;
|
|
49
|
+
float ux = mod((s - tflow) * k, 5.0 * 101.8 * k / 360.0);
|
|
50
|
+
float m = crisp(sheetC(vec2(ux, (0.012 + depth / bnd * 0.056) * k), 0), 1.0) * step(depth, bnd);
|
|
51
|
+
col = mix(col, plum, step(depth, bnd));
|
|
52
|
+
col = mix(col, peach, m);
|
|
53
|
+
col = mix(col, peach, scLine(depth - bnd, 1.0) * 0.8);
|
|
54
|
+
// arch window with a peach dither of the plate
|
|
55
|
+
vec2 lo = vec2(0.17, 0.14);
|
|
56
|
+
vec2 hi = vec2(0.84, 0.88);
|
|
57
|
+
float px = scPx();
|
|
58
|
+
vec2 pix = floor(q / px);
|
|
59
|
+
float l = scTone((pix + 0.5) * px, lo * scU, hi * scU, 1.6, 0.06);
|
|
60
|
+
col = mix(col, mix(plum, peach, step(scBayer(pix), l)), scAA(sdArch(c, lo, hi)));
|
|
61
|
+
col = mix(col, off, scLine(sdArch(c, lo - 0.012, hi + 0.012), 1.0));
|
|
62
|
+
// dial of 60 ticks and the split-flap countdown
|
|
63
|
+
vec2 ctr = vec2(1.3, 0.5);
|
|
64
|
+
float rr = length(c - ctr);
|
|
65
|
+
float ang = (atan(c.y - ctr.y, c.x - ctr.x) / 6.28318 + 0.5) * 60.0;
|
|
66
|
+
float tk = step(0.25, fract(ang)) * step(fract(ang), 0.75) * step(0.3, rr) * step(rr, 0.3 + 0.03 + 0.02 * step(mod(floor(ang), 5.0), 0.5));
|
|
67
|
+
float on = step(floor(ang) + 0.5, mod(cut, 60.0));
|
|
68
|
+
col = mix(col, mix(plum * 1.6, peach, on), tk);
|
|
69
|
+
float val = mod(60.0 - cut, 100.0);
|
|
70
|
+
float cw = 0.17;
|
|
71
|
+
float v1 = fdFlap(q, vec2(ctr.x - 0.185, ctr.y - 0.13), vec2(cw, 0.26), floor(mod(60.0 - cut + 1.0, 100.0) / 10.0), floor(val / 10.0), u);
|
|
72
|
+
float v2 = fdFlap(q, vec2(ctr.x + 0.015, ctr.y - 0.13), vec2(cw, 0.26), mod(60.0 - cut + 1.0, 10.0), mod(val, 10.0), u);
|
|
73
|
+
col = mix(col, off, scAA(sdBox(c, vec2(ctr.x - 0.185, ctr.y - 0.13), vec2(ctr.x - 0.015, ctr.y + 0.13)) - 0.02));
|
|
74
|
+
col = mix(col, off, scAA(sdBox(c, vec2(ctr.x + 0.015, ctr.y - 0.13), vec2(ctr.x + 0.185, ctr.y + 0.13)) - 0.02));
|
|
75
|
+
col = mix(col, groundColor.rgb, min(v1 + v2, 1.0));
|
|
76
|
+
col = mix(col, groundColor.rgb, scLine(c.y - ctr.y, 2.0) * scBox(c, vec2(ctr.x - 0.185, 0.0), vec2(ctr.x + 0.185, 1.0)));
|
|
77
|
+
col = mix(col, peach, scSheet(q, 1));
|
|
78
|
+
col = mix(col, off, max(scPlus(c, vec2(1.0, 0.18), 0.02), scPlus(c, vec2(1.6, 0.82), 0.02)));
|
|
79
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Scene 16 (variant 6, rot 1), tilt-tiles: a lemon field tilted about 14 degrees into rows of Rockwell word tiles. Neighbouring rows flow
|
|
2
|
+
// the other way and each beat every row jumps a different distance; filled and outlined rows alternate, and each onset swaps the kind
|
|
3
|
+
// of one row. A tilted window holds the plate as a three-tone posterize (black, lemon, white); a white caption box, a numbered black disc.
|
|
4
|
+
// Palette: ground (lemon), ink (black), accent (white), tintA (deep green). Text set 17: r filled word, g outlined word, b caption.
|
|
5
|
+
void sceneTilt(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec3 blk = inkColor.rgb;
|
|
9
|
+
vec3 wht = accentColor.rgb;
|
|
10
|
+
float cut = floor(clk.x * 0.5);
|
|
11
|
+
col = groundColor.rgb;
|
|
12
|
+
vec2 pr = stRot(c - vec2(0.5 * A, 0.5), 0.24);
|
|
13
|
+
float rowH = 0.14;
|
|
14
|
+
float n = floor(pr.y / rowH);
|
|
15
|
+
float v = pr.y - n * rowH;
|
|
16
|
+
float dir = mod(n, 2.0) < 0.5 ? 1.0 : -1.0;
|
|
17
|
+
float off = dir * cut * (0.14 + 0.05 * mod(abs(n), 3.0));
|
|
18
|
+
float u = mod(pr.x + off, 0.92);
|
|
19
|
+
float k = RENDERSIZE.y;
|
|
20
|
+
float swp = step(abs(mod(n, 7.0) - mod(clk.z, 7.0)), 0.5);
|
|
21
|
+
int ch = mod(n + swp, 2.0) < 0.5 ? 0 : 1;
|
|
22
|
+
float m = crisp(sheetC(vec2(u * 0.5 * k, (0.0478 + (v - 0.07) * 0.5) * k), ch), 1.0);
|
|
23
|
+
col = mix(col, blk, m);
|
|
24
|
+
col = mix(col, blk, scLine(v, 1.0) * 0.6);
|
|
25
|
+
// tilted window with the posterized plate
|
|
26
|
+
vec2 wc = vec2(0.04, 0.0);
|
|
27
|
+
vec2 wh = vec2(0.5, 0.25);
|
|
28
|
+
float inW = scAA(sdBox(pr, wc - wh, wc + wh));
|
|
29
|
+
float l = scTone(q, vec2(0.0), S, 1.5, 0.05);
|
|
30
|
+
vec3 pz = l < 0.3 ? blk : (l < 0.62 ? groundColor.rgb : wht);
|
|
31
|
+
col = mix(col, pz, inW);
|
|
32
|
+
col = mix(col, blk, scLine(sdBox(pr, wc - wh, wc + wh), 3.0));
|
|
33
|
+
// caption box, numbered disc
|
|
34
|
+
col = mix(col, wht, scAA(sdBox(c, vec2(0.04, 0.86), vec2(0.7, 0.97))));
|
|
35
|
+
col = mix(col, blk, scSheet(q, 2) * scBox(c, vec2(0.04, 0.86), vec2(0.7, 0.97)));
|
|
36
|
+
vec2 dc = vec2(A - 0.14, 0.15);
|
|
37
|
+
col = mix(col, blk, scAA(length(c - dc) - 0.09));
|
|
38
|
+
col = mix(col, wht, numTxt(q, (dc - vec2(0.035, 0.03)) * scU, scCell() * 2.0, mod(cut, 100.0), 2));
|
|
39
|
+
col = mix(col, tintA.rgb, scLine(length(c - dc) - 0.115, 2.0));
|
|
40
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Scene 17 (variant 7, rot 1), marquee-stack: a teal field of six stacked word rows. Every beat each row jumps its own distance in its own
|
|
2
|
+
// direction (a marquee that moves in steps, not a scroll); each row has three echo copies trailing in colour steps (dark teal,
|
|
3
|
+
// tangerine, cream shade); the last row is Hangul. A cream-framed window holds the plate as a coarse four-colour mosaic. Palette: ground
|
|
4
|
+
// (teal), ink (cream), accent (tangerine), tintA (dark teal). Text set 18: r the word (Gill Sans Bold), g the Hangul word, b the caption.
|
|
5
|
+
void sceneMarquee(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec3 cream = inkColor.rgb;
|
|
9
|
+
vec3 tang = accentColor.rgb;
|
|
10
|
+
vec3 deep = tintA.rgb;
|
|
11
|
+
float cut = floor(clk.x);
|
|
12
|
+
col = groundColor.rgb;
|
|
13
|
+
float n = floor((c.y - 0.05) / 0.15);
|
|
14
|
+
float v = (c.y - 0.05) - n * 0.15;
|
|
15
|
+
float k = RENDERSIZE.y;
|
|
16
|
+
if (n >= 0.0 && n < 6.0) {
|
|
17
|
+
float dk = n < 0.5 ? 0.25 : (n < 1.5 ? 0.42 : (n < 2.5 ? 0.6 : (n < 3.5 ? 0.33 : (n < 4.5 ? 0.5 : 0.7))));
|
|
18
|
+
float dir = mod(n, 2.0) < 0.5 ? 1.0 : -1.0;
|
|
19
|
+
float off = dir * (cut * dk + clk.z * 0.02 * dk);
|
|
20
|
+
int ch = n > 4.5 ? 1 : 0;
|
|
21
|
+
for (int e = 3; e >= 0; e--) {
|
|
22
|
+
float oe = off + dir * float(e) * 0.07;
|
|
23
|
+
float u = mod(c.x + oe, 0.95);
|
|
24
|
+
float m = crisp(sheetC(vec2(u * 0.5 * k, (0.0478 + (v - 0.075) * 0.5) * k), ch), 1.0);
|
|
25
|
+
vec3 ec = e == 3 ? deep : (e == 2 ? tang : (e == 1 ? cream * 0.78 : cream));
|
|
26
|
+
col = mix(col, ec, m);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
col = mix(col, cream, scLine(fract((c.y - 0.05) / 0.15) * 0.15, 1.0) * 0.0);
|
|
30
|
+
// mosaic window
|
|
31
|
+
vec2 lo = vec2(1.1, 0.2);
|
|
32
|
+
vec2 hi = vec2(1.64, 0.8);
|
|
33
|
+
float blk = 0.022 * scU;
|
|
34
|
+
vec2 mq = (floor(q / blk) + 0.5) * blk;
|
|
35
|
+
float l = pow(scTone(mq, lo * scU, hi * scU, 1.5, 0.02), 0.6);
|
|
36
|
+
vec3 mc = l < 0.25 ? deep : (l < 0.5 ? groundColor.rgb * 1.25 : (l < 0.75 ? tang : cream));
|
|
37
|
+
col = mix(col, mc, scAA(sdBox(c, lo, hi)));
|
|
38
|
+
col = mix(col, cream, scLine(sdBox(c, lo - 0.012, hi + 0.012), 3.0));
|
|
39
|
+
// caption bar, disc, crosses
|
|
40
|
+
col = mix(col, cream, scAA(sdBox(c, vec2(0.04, 0.955), vec2(0.8, 1.01))));
|
|
41
|
+
col = mix(col, deep, scSheet(q, 2) * scBox(c, vec2(0.04, 0.955), vec2(0.8, 1.01)));
|
|
42
|
+
col = mix(col, tang, scAA(length(c - vec2(A - 0.12, 0.88)) - 0.07));
|
|
43
|
+
col = mix(col, deep, numTxt(q, vec2(A - 0.155, 0.855) * scU, scCell() * 2.0, mod(cut, 100.0), 2));
|
|
44
|
+
col = mix(col, cream, max(scPlus(c, vec2(1.05, 0.15), 0.02), scPlus(c, vec2(1.69, 0.85), 0.02)));
|
|
45
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Scene 18 (variant 8, rot 1), lens-wrap: an olive field; the plate wrapped on a sphere (longitude / latitude mapping, a red-blue lens
|
|
2
|
+
// fringe, a specular patch) whose size swells with the bass; a perspective floor of pink tile lines that steps toward you on every beat;
|
|
3
|
+
// a 4 x 3 block of small panels that each turn a quarter on every third onset; Didot and Courier New type. Palette: ground (olive),
|
|
4
|
+
// ink (pink), accent (black), tintA (dark olive), tintB (cream). Text set 19: r the word (Didot), g the caption (Courier New).
|
|
5
|
+
void sceneLens(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec3 pink = inkColor.rgb;
|
|
9
|
+
vec3 blk = accentColor.rgb;
|
|
10
|
+
vec3 cream = tintB.rgb;
|
|
11
|
+
float cut = floor(clk.x);
|
|
12
|
+
col = groundColor.rgb;
|
|
13
|
+
// perspective floor
|
|
14
|
+
float hy = 0.58;
|
|
15
|
+
float t = 0.1 / max(c.y - hy + 0.004, 0.004);
|
|
16
|
+
float wx = (c.x - 0.5 * A) * t * 1.2;
|
|
17
|
+
float wz = t * 1.2 + cut * 0.5;
|
|
18
|
+
float gx = 1.0 - clamp((0.5 - abs(fract(wx) - 0.5)) / max(fwidth(wx) * 1.2, 1e-3), 0.0, 1.0);
|
|
19
|
+
float gz = 1.0 - clamp((0.5 - abs(fract(wz) - 0.5)) / max(fwidth(wz) * 1.2, 1e-3), 0.0, 1.0);
|
|
20
|
+
float below = step(hy, c.y);
|
|
21
|
+
col = mix(col, tintA.rgb, 0.6 * below);
|
|
22
|
+
col = mix(col, pink, max(gx, gz) * smoothstep(0.0, 0.08, c.y - hy) * 0.9 * below);
|
|
23
|
+
col = mix(col, pink, scLine(c.y - hy, 1.0) * 0.8);
|
|
24
|
+
// sphere
|
|
25
|
+
vec2 ctr = vec2(0.62, 0.45);
|
|
26
|
+
float R = 0.3 + 0.05 * stLevel().r;
|
|
27
|
+
vec2 d = (c - ctr) / R;
|
|
28
|
+
float r2 = dot(d, d);
|
|
29
|
+
float z = sqrt(max(1.0 - r2, 0.0));
|
|
30
|
+
vec2 uv = vec2(0.5 + atan(d.x, max(z, 0.001)) / 3.0, 0.5 + asin(clamp(d.y, -1.0, 1.0)) / 3.0);
|
|
31
|
+
vec3 f = vec3(scPlate((uv - 0.5) * S + 0.5 * S, vec2(0.0), S).r, scPlate((uv - 0.5) * 1.025 * S + 0.5 * S, vec2(0.0), S).g, scPlate((uv - 0.5) * 1.05 * S + 0.5 * S, vec2(0.0), S).b);
|
|
32
|
+
f = clamp((f - 0.06) * 1.3, 0.0, 1.0) * (0.35 + 0.65 * z);
|
|
33
|
+
float spec = smoothstep(0.28, 0.0, length((d - vec2(-0.38, -0.42)) * vec2(1.0, 1.6)));
|
|
34
|
+
f = mix(f, cream, spec * 0.55);
|
|
35
|
+
col = mix(col, f, scAA((sqrt(r2) - 1.0) * R));
|
|
36
|
+
col = mix(col, pink, scLine((sqrt(r2) - 1.0) * R, 2.0));
|
|
37
|
+
col = mix(col, pink, scLine(length((c - ctr) * vec2(1.0, 3.2)) - 0.46, 1.0) * 0.8);
|
|
38
|
+
// small panels that turn
|
|
39
|
+
vec2 g = (c - vec2(A - 0.62, 0.06)) / 0.14;
|
|
40
|
+
vec2 pid = floor(g);
|
|
41
|
+
if (pid.x >= 0.0 && pid.x < 4.0 && pid.y >= 0.0 && pid.y < 3.0) {
|
|
42
|
+
float i = pid.x + 4.0 * pid.y;
|
|
43
|
+
vec2 p = (fract(g) - 0.5) * 0.14;
|
|
44
|
+
if (abs(p.x) < 0.055 && abs(p.y) < 0.055) {
|
|
45
|
+
p = stRot(p, floor((clk.z + i) / 3.0) * 1.5708);
|
|
46
|
+
float bars = 0.0;
|
|
47
|
+
for (int j = 0; j < 3; j++) {
|
|
48
|
+
float h = 0.02 + 0.07 * hash12(vec2(i, float(j)));
|
|
49
|
+
bars = max(bars, step(abs(p.x - (-0.03 + 0.03 * float(j))), 0.009) * step(-0.045, p.y) * step(p.y, -0.045 + h));
|
|
50
|
+
}
|
|
51
|
+
col = mix(cream, blk, bars);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
col = mix(col, cream, scSheet(q, 0));
|
|
55
|
+
col = mix(col, cream, scSheet(q, 1));
|
|
56
|
+
col = mix(col, blk, numTxt(q, vec2(0.05, 0.92) * scU, scCell() * 2.0, mod(cut * 3.0, 1000.0), 3));
|
|
57
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Scene 19 (variant 9, rot 1), liquid-type: a sky-blue field; the plate blurred and thresholded into ink-blot shapes (mid blue, one
|
|
2
|
+
// orange blot in the brightest part); a big Bodoni 72 word on a double sine ripple whose phase steps on every beat; a typed American
|
|
3
|
+
// Typewriter note and a crosshair reticle that jumps to a new place on every beat. Palette: ground (sky), ink (navy), accent (orange),
|
|
4
|
+
// tintA (pale), tintB (mid blue). Text set 20: r the word (Bodoni 72), g the typed note (American Typewriter).
|
|
5
|
+
void sceneLiquid(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec4 hit = stHit();
|
|
9
|
+
vec3 navy = inkColor.rgb;
|
|
10
|
+
vec3 org = accentColor.rgb;
|
|
11
|
+
float cut = floor(clk.x);
|
|
12
|
+
col = groundColor.rgb;
|
|
13
|
+
// ink blots: blurred plate luma thresholded
|
|
14
|
+
float b = 0.0;
|
|
15
|
+
float r = 7.0 * U * 3.0;
|
|
16
|
+
for (int i = 0; i < 8; i++) {
|
|
17
|
+
float a = float(i) * 0.7854;
|
|
18
|
+
b += luma(scPlate(q + r * vec2(cos(a), sin(a)), vec2(0.0), S));
|
|
19
|
+
}
|
|
20
|
+
b = b / 8.0;
|
|
21
|
+
float thr = 0.3 - 0.05 * hit.y;
|
|
22
|
+
col = mix(col, tintB.rgb, smoothstep(thr, thr + 0.025, b));
|
|
23
|
+
col = mix(col, org, smoothstep(0.5, 0.53, b));
|
|
24
|
+
// liquid word
|
|
25
|
+
float ph = cut * 0.9;
|
|
26
|
+
vec2 sq = q + scU * vec2(0.02 * sin(c.y * 14.0 + ph), 0.03 * sin(c.x * 6.0 + ph * 1.3));
|
|
27
|
+
float m = crisp(sheetC(sq * (RENDERSIZE / scS), 0), 1.0);
|
|
28
|
+
col = mix(col, navy, m);
|
|
29
|
+
// reticle
|
|
30
|
+
vec2 rp = vec2(0.3 + (A - 0.6) * hash12(vec2(cut, 2.0)), 0.25 + 0.5 * hash12(vec2(cut, 5.0)));
|
|
31
|
+
col = mix(col, navy, max(scLine(length(c - rp) - 0.06, 1.2), max(scLine(c.x - rp.x, 1.0) * step(abs(c.y - rp.y), 0.1) * step(0.03, abs(c.y - rp.y)), scLine(c.y - rp.y, 1.0) * step(abs(c.x - rp.x), 0.1) * step(0.03, abs(c.x - rp.x)))));
|
|
32
|
+
col = mix(col, navy, numTxt(q, (rp + vec2(0.07, 0.06)) * scU, scCell(), mod(cut * 17.0, 1000.0), 3));
|
|
33
|
+
col = mix(col, navy, scSheet(q, 1));
|
|
34
|
+
col = mix(col, navy, max(scPlus(c, vec2(0.06, 0.06), 0.02), scPlus(c, vec2(A - 0.06, 0.94), 0.02)));
|
|
35
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Scene 20 (variant 0, rot 2), panel-grid: an ice-white sheet with a 6 x 4 grid of small square panels, each a thin-line instrument
|
|
2
|
+
// (plate isolines, spectrum comb, bass gauge, big number, starburst, waveform, checker, reticle). On every onset one panel (in turn)
|
|
3
|
+
// swings a quarter turn in three frames and shows its next instrument. Brick accents; Optima and SF Mono type. Palette: ground (ice),
|
|
4
|
+
// ink (black), accent (brick), tintA (grey). Text set 21: r the Optima caption, g the SF Mono caption.
|
|
5
|
+
vec2 pgPanel(int kind, vec2 p, vec2 ctr, vec4 clk) {
|
|
6
|
+
float h = 0.1;
|
|
7
|
+
vec2 pp = (p + h) * scU;
|
|
8
|
+
float cell = scCell();
|
|
9
|
+
if (kind == 0) {
|
|
10
|
+
float l = scTone((ctr + p) * scU, (ctr - h) * scU, (ctr + h) * scU, 1.4, 0.05);
|
|
11
|
+
return vec2(smoothstep(0.38, 0.46, abs(fract(l * 7.0) - 0.5)), 0.0);
|
|
12
|
+
}
|
|
13
|
+
if (kind == 1) {
|
|
14
|
+
float i = floor((p.x + h) / (2.0 * h) * 12.0);
|
|
15
|
+
float lv = bandAt((i + 0.5) / 12.0);
|
|
16
|
+
float bar = step(abs(fract((p.x + h) / (2.0 * h) * 12.0) - 0.5), 0.3) * step(h - lv * 2.0 * h * 0.9, p.y + h) * step(p.y, h * 0.9);
|
|
17
|
+
return vec2(bar * step(0.3, lv + 0.2), bar * step(0.7, lv));
|
|
18
|
+
}
|
|
19
|
+
if (kind == 2) {
|
|
20
|
+
float r = length(p);
|
|
21
|
+
float a = atan(p.x, -p.y);
|
|
22
|
+
float na = -2.3 + 4.6 * stLevel().r;
|
|
23
|
+
float needle = scLine(sdSeg(p, vec2(0.0), 0.075 * vec2(sin(na), -cos(na))), 1.5);
|
|
24
|
+
float tk = step(abs(fract(a * 3.8197) - 0.5), 0.12) * step(0.065, r) * step(r, 0.085) * step(abs(a), 2.4);
|
|
25
|
+
return vec2(max(scLine(r - 0.085, 1.0), tk), needle);
|
|
26
|
+
}
|
|
27
|
+
if (kind == 3) { return vec2(numTxt(pp, vec2(0.04, 0.07) * scU, cell * 2.0, mod(clk.x * 7.0, 100.0), 2), 0.0); }
|
|
28
|
+
if (kind == 4) { return vec2(scBurst(p, 0.09, 0.012, 0.0, 24.0), scAA(length(p) - 0.01)); }
|
|
29
|
+
if (kind == 5) {
|
|
30
|
+
float y = waveI((p.x + h) / (2.0 * h) * 400.0) * scopeGain * 0.3;
|
|
31
|
+
return vec2(scLine(p.y - y, 1.2) * step(abs(p.x), 0.09), scLine(p.y, 1.0) * 0.0);
|
|
32
|
+
}
|
|
33
|
+
if (kind == 6) {
|
|
34
|
+
vec2 g = floor(p / 0.033);
|
|
35
|
+
return vec2(step(1.0, mod(g.x + g.y, 2.0)) * step(abs(p.x), 0.09) * step(abs(p.y), 0.09), 0.0);
|
|
36
|
+
}
|
|
37
|
+
float rr = length(p);
|
|
38
|
+
return vec2(max(max(scLine(rr - 0.05, 1.0), scLine(p.x, 1.0) * step(abs(p.y), 0.085)), scLine(p.y, 1.0) * step(abs(p.x), 0.085)), 0.0);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void scenePanelGrid(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
42
|
+
vec2 c = q / scU;
|
|
43
|
+
float A = S.x / S.y;
|
|
44
|
+
vec3 ink = inkColor.rgb;
|
|
45
|
+
vec3 brick = accentColor.rgb;
|
|
46
|
+
col = groundColor.rgb;
|
|
47
|
+
vec2 o = vec2((A - 1.38) * 0.5, 0.04);
|
|
48
|
+
vec2 g = (c - o) / 0.23;
|
|
49
|
+
vec2 id = floor(g);
|
|
50
|
+
if (id.x >= 0.0 && id.x < 6.0 && id.y >= 0.0 && id.y < 4.0) {
|
|
51
|
+
vec2 ctr = o + (id + 0.5) * 0.23;
|
|
52
|
+
vec2 p = c - ctr;
|
|
53
|
+
float i = id.x + 6.0 * id.y;
|
|
54
|
+
if (abs(p.x) < 0.105 && abs(p.y) < 0.105) {
|
|
55
|
+
float mine = mod(clk.z, 24.0) == i ? 1.0 : 0.0;
|
|
56
|
+
float age = float(FRAMEINDEX) - clk.w;
|
|
57
|
+
float u = (mine > 0.5 && clk.z > 0.5) ? clamp((age + 1.0) / 3.0, 0.0, 1.0) : 1.0;
|
|
58
|
+
float turns = floor((clk.z + 24.0 - i) / 24.0);
|
|
59
|
+
float ang = (turns - (1.0 - u)) * 1.5708;
|
|
60
|
+
float tcount = u < 0.5 ? turns - 1.0 : turns;
|
|
61
|
+
int kind = int(floor(hash12(vec2(i, 3.3 + tcount)) * 8.0));
|
|
62
|
+
vec2 pr = stRot(p, ang);
|
|
63
|
+
vec2 res = pgPanel(kind, pr, ctr, clk);
|
|
64
|
+
col = mix(col, tintA.rgb * 1.5, 0.0);
|
|
65
|
+
col = mix(col, ink, res.x * step(abs(pr.x), 0.1) * step(abs(pr.y), 0.1));
|
|
66
|
+
col = mix(col, brick, res.y);
|
|
67
|
+
}
|
|
68
|
+
col = mix(col, ink, scLine(sdBox(p, vec2(-0.105), vec2(0.105)), 1.0));
|
|
69
|
+
}
|
|
70
|
+
col = mix(col, brick, scAA(sdBox(c, vec2(0.0, 0.04), vec2(o.x - 0.04, 0.14))));
|
|
71
|
+
col = mix(col, ink, scLine(c.x - (o.x - 0.02), 1.0) * step(0.2, c.y) * step(c.y, 0.96) * 0.7);
|
|
72
|
+
col = mix(col, ink, scSheet(q, 0));
|
|
73
|
+
col = mix(col, ink, scSheet(q, 1));
|
|
74
|
+
col = mix(col, brick, scLine(c.y - 0.975, 2.0) * step(0.0, c.x) * step(c.x, A * (0.2 + 0.8 * stLevel().a)));
|
|
75
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Scene 21 (variant 1, rot 2), mirror-track: a violet field and a central window holding the plate mirrored about its vertical axis and
|
|
2
|
+
// solarized into navy / brick / cream. Five outline target squares with tiny number labels jump to new places on every beat and are
|
|
3
|
+
// mirrored with the plate; a barcode strip re-seeds on every beat; a file-lookup text block with struck-through rows (D2Coding) and a big
|
|
4
|
+
// Phosphate word. Palette: ground (dusty violet), ink (cream), accent (brick red), tintA (indigo), tintB (pale violet). Text set 22: r the word, g the file block.
|
|
5
|
+
void sceneMirror(vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
6
|
+
vec2 c = q / scU;
|
|
7
|
+
float A = S.x / S.y;
|
|
8
|
+
vec4 hit = stHit();
|
|
9
|
+
vec3 cream = inkColor.rgb;
|
|
10
|
+
vec3 navy = accentColor.rgb;
|
|
11
|
+
vec3 dk = tintA.rgb;
|
|
12
|
+
float cut = floor(clk.x);
|
|
13
|
+
col = groundColor.rgb;
|
|
14
|
+
vec2 lo = vec2(0.34, 0.08);
|
|
15
|
+
vec2 hi = vec2(A - 0.06, 0.8);
|
|
16
|
+
float wc = 0.5 * (lo.x + hi.x);
|
|
17
|
+
vec2 qm = vec2(wc * scU + abs(q.x - wc * scU), q.y);
|
|
18
|
+
float l = scTone(qm, lo * scU, hi * scU, 1.4, 0.05);
|
|
19
|
+
float s = abs(l - (0.4 + 0.05 * mod(cut, 3.0))) * 2.0;
|
|
20
|
+
vec3 sol = s < 0.22 ? navy : (s < 0.55 ? dk : cream);
|
|
21
|
+
col = mix(col, sol, scAA(sdBox(c, lo, hi)));
|
|
22
|
+
col = mix(col, cream, scLine(sdBox(c, lo - 0.01, hi + 0.01), 1.5));
|
|
23
|
+
col = mix(col, cream, scLine(c.x - wc, 1.0) * step(lo.y, c.y) * step(c.y, hi.y) * 0.8);
|
|
24
|
+
// targets, mirrored
|
|
25
|
+
for (int i = 0; i < 5; i++) {
|
|
26
|
+
float fi = float(i);
|
|
27
|
+
vec2 h = hash22(vec2(fi + 1.0, cut));
|
|
28
|
+
vec2 tp = vec2(mix(lo.x + 0.05, wc, h.x), mix(lo.y + 0.06, hi.y - 0.06, h.y));
|
|
29
|
+
float sz = 0.03 + 0.03 * hash12(vec2(fi, 9.0));
|
|
30
|
+
for (int sd = 0; sd < 2; sd++) {
|
|
31
|
+
vec2 tq = sd == 0 ? tp : vec2(2.0 * wc - tp.x, tp.y);
|
|
32
|
+
float box = scLine(sdBox(c, tq - sz, tq + sz), 1.2);
|
|
33
|
+
vec2 br = abs(c - tq) - sz;
|
|
34
|
+
col = mix(col, cream, max(box, 0.0));
|
|
35
|
+
col = mix(col, cream, numTxt(q, (tq + vec2(sz + 0.01, -sz)) * scU, scCell(), mod(fi * 37.0 + cut * 11.0, 1000.0), 3));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// barcode
|
|
39
|
+
float bx = floor(c.x / 0.004);
|
|
40
|
+
float bar = step(0.5, hash12(vec2(bx, cut))) * step(0.04, c.x) * step(c.x, 0.3) * step(0.86, c.y) * step(c.y, 0.96);
|
|
41
|
+
col = mix(col, cream, bar);
|
|
42
|
+
// file block with struck-through rows
|
|
43
|
+
float row = floor((c.y - 0.1) / 0.034);
|
|
44
|
+
float strike = step(0.0, row) * step(mod(row, 3.0), 1.5) * step(0.5, mod(row, 3.0)) * step(abs(c.y - (0.1 + (row + 0.5) * 0.034)), 0.0012) * step(0.04, c.x) * step(c.x, 0.3);
|
|
45
|
+
col = mix(col, cream, scSheet(q, 1));
|
|
46
|
+
col = mix(col, cream, strike);
|
|
47
|
+
col = mix(col, cream, scSheet(q, 0));
|
|
48
|
+
col = mix(col, navy, scAA(sdBox(c, vec2(0.04, 0.03), vec2(0.04 + 0.26 * stLevel().a, 0.045))));
|
|
49
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Scene dispatcher: variant 1..9 and 0 are the first ten scenes, rot 1 adds 10 (variant 0..5 + 10 are the round 9 scenes).
|
|
2
|
+
void drawScene(int v, vec2 q, vec2 S, vec4 clk, inout vec3 col) {
|
|
3
|
+
scS = S;
|
|
4
|
+
scU = S.y;
|
|
5
|
+
if (v == 1) { sceneSpecimen(q, S, clk, col); }
|
|
6
|
+
if (v == 2) { sceneWiring(q, S, clk, col); }
|
|
7
|
+
if (v == 3) { sceneFieldCut(q, S, clk, col); }
|
|
8
|
+
if (v == 4) { scenePattern(q, S, clk, col); }
|
|
9
|
+
if (v == 5) { sceneAnatomy(q, S, clk, col); }
|
|
10
|
+
if (v == 6) { sceneDeck(q, S, clk, col); }
|
|
11
|
+
if (v == 7) { sceneBootlog(q, S, clk, col); }
|
|
12
|
+
if (v == 8) { sceneTunnel(q, S, clk, col); }
|
|
13
|
+
if (v == 9) { sceneRunner(q, S, clk, col); }
|
|
14
|
+
if (v == 0) { sceneAscii(q, S, clk, col); }
|
|
15
|
+
if (v == 10) { sceneCubeWall(q, S, clk, col); }
|
|
16
|
+
if (v == 11) { sceneVortex(q, S, clk, col); }
|
|
17
|
+
if (v == 12) { sceneSticker(q, S, clk, col); }
|
|
18
|
+
if (v == 13) { sceneRibbon(q, S, clk, col); }
|
|
19
|
+
if (v == 14) { sceneSlab(q, S, clk, col); }
|
|
20
|
+
if (v == 15) { sceneFrameDial(q, S, clk, col); }
|
|
21
|
+
if (v == 16) { sceneTilt(q, S, clk, col); }
|
|
22
|
+
if (v == 17) { sceneMarquee(q, S, clk, col); }
|
|
23
|
+
if (v == 18) { sceneLens(q, S, clk, col); }
|
|
24
|
+
if (v == 19) { sceneLiquid(q, S, clk, col); }
|
|
25
|
+
if (v == 20) { scenePanelGrid(q, S, clk, col); }
|
|
26
|
+
if (v == 21) { sceneMirror(q, S, clk, col); }
|
|
27
|
+
}
|