Repository navigation
Releases
0.8.0 - Spengler
Silvia 0.8.0 Spengler — Patch Notes
New nodes
- Smooth Counter — eased counting
- XY Pad — 2D control surface
- Color Dither — color-aware ordered dithering
- Wavefold — waveshaping fold
- Slime Mold — physarum-style sim
- Cosine Gradient — palette generator
- Lyapunov — fractal generator
- Polka Dot — repeating dot pattern with center-sampled per-dot inputs (color, radius, softness, stagger)
- Palette — Makes palettes with perceptual color space
- Removed: Brownian Motion, all put in XY Pad
Audio overhaul
- AudioScope widget with per-band exciter and improved band handle feedback
- Screen capture audio support
- FFT halved to 512 for snappier response
- Audio band outputs renamed to Red/Green/Blue Band
- Oscilloscope output ports deduplicated
- Meter labels replaced with colored dots, scope toggle added
Node enhancements
- Mux Number — crossfade mode
- Tunnel 3D — texture mapping options, simplified controls
- Cellular Automata — overhauled with flat grid buffers, trail decay, interactive preview
- Drawing Canvas — upgraded; removed stray opacity; flood-fill + symmetry transform optimization
- Geiss Flow — calmer default look
- Fractal mode selector — split into separate output ports
- Performance passes on Step Sequencer, Euclidean Rhythm, Cosine Gradient, Brick Game
- Slime mold gets louder (more good)
Fixes
- Mixer shader Y-flip removed (tempTexture now shares mixer FBO convention)
- Separate output texture prevents read-write feedback on
tempTexture - Audio analyzer no longer goes silent after switching media sources
- Converter popup now appears when dragging Output's Frame Out onto a Number input
s-numberrounds programmatic values to step- Node reset now also clears options, custom values, and custom area
<select>dropdown arrows render again (templateinertdocument bug)
App / packaging
- Linux build now ships as tar.gz with a
.desktoplauncher - First-run About modal gated behind a photosensitivity warning
- Bundled demo clip swapped to gumbasia.webm; gumby is the default first-launch patch
- Patch format version bumped to 0.8
- Gumbasia license added; Will Hofferbert added to THANKS
_template.jsrewritten as an annotated reference; orphanedtunnel.jsremoved
0.7.2 - Laptop rock
IF BROKEN, CHECK QUICKSTART. macOS and some Linux need a little care!
TLDR: This is a major architectural improvement. Previously, the biggest bottleneck on silvia, by a longshot, was GPU memory bandwidth, which made most laptops and desktops insufficient for even modest patches. This is the biggest improvement to performance yet, particularly with stable framerates on the final mixer! And performance degrades more gracefully, where interconnected outputs don't slow each other down but gracefully fallback to old frames if one is unavailable.
0.7.2
New Features
- Palette node for extracting dominant colors via Oklab clustering
- sRGB-to-Oklab and Oklab-to-sRGB GLSL conversion functions
Architecture
- Shared WebGL context: Output nodes now render as FBOs in the mixer's context instead of maintaining separate GL contexts
- Refactored textureMap to store
{tex, w, h}entry objects instead of raw WebGL textures
UI/UX
- Replaced workspace delete modal with inline confirmation in context menu
- Nodes always come to front on pointerdown, even when clicking child controls
- Fixed an issue with colorpickers cutting off in custom section of nodes
Fixes
- Fixed texSubImage2D on uninitialized textures when source fans out to multiple Outputs
- Documented demo video autoplay click requirement in howto
Misc
- Moved camcordercrt node from Effects to Feedback category
0.7.1 - Night of the living dead mediums
IF BROKEN, CHECK QUICKSTART. macOS and some Linux need a little care!
Silvia 0.7.1 — Patch Notes
New Nodes
- Brownian Motion node
- Camcorder CRT node — with perspective tilt, brightness control, drift UI
New Features
- MIDI settings modal — dedicated modal with device list, mappings table, and live monitor
- Center X/Y inputs on transform/distort nodes; consolidated tunnel node
- Wave node rework — rotation param, linear/radial modes, wiggle/ripple displacement
- Navigate to node — click a connection tag to scroll to its source node
- Video preview rework — native element, overlay buttons, drag-and-drop
- Demo video — new camcorder CRT default patch with bundled video; Demo Video selectable from dropdown
- PipeWire loopback scripts for virtual audio routing on Linux
Performance
- Cache uniform locations and use
texSubImage2Din WebGL renderer (all nodes) - GPU backpressure and context loss recovery
Bug Fixes
- Fix mixer preview not clearing when output node's input connection is deleted
- Fix GPU crash from stale
captureStreammailbox handles on canvas resize - Fix feedback delay: ensure minimum of 1 frame instead of 0
- Fix CSS variable names (
--primary→--primary-color) - Fix counter wrap mode
- Fix button positioning
- Resume suspended AudioContext on first user interaction
- Defer AudioContext and shadow player init until user gesture
- Strip debug console.logs from Electron main process; fix session load
Platform / Packaging
- Linux sandbox auto-fix (
install.sh+ launcher integration) - QUICKSTART.txt for all platforms
- Round bottom corners of node options when custom area is empty
0.7.0-beta - the workspaces release
Silvia 0.7-beta
Workspaces
- Unlimited independent workspaces in a tab bar
- Click a tab to switch, double-click to rename, right-click for options
- Nodes can appear on multiple workspaces — toggle from the node right-click menu
- Cross-workspace connections show source tags on ports — click to jump to the source
- Ctrl+T to create a new workspace, Ctrl+1–9 to switch
- Properties modal via tab right-click to edit name, author, and description
- Tab provenance indicator shows which workspaces have a saved source
Main Input
- New left-side panel for global video and audio source management
- Video: file, webcam, or screen capture with live preview
- Audio: file, mic/line-in, or video audio with spectrum display, level meters, gain, and 3-band EQ
- Main Input node provides video texture, bass/bass+/mid/high levels, and oscilloscope output
- Audio meters with threshold sliders, event outputs, and frequency histogram
- Panel collapses out of the way when not needed
Save & Load
- Ctrl+S quick save (silent overwrite), Ctrl+Shift+S for Save As
- Save/Save As tabs in the save modal with per-field overwrite control
- Simplified Open modal with clear "Open" (new tab) and "Add In" (merge) actions
- Workspaces track their save origin for quick save
- Save all open workspaces into a single compound file
- Load compound files to restore a full multi-workspace session
- Drag-and-drop file upload in the asset manager
- Inline migration for legacy save formats
New Nodes
- Dither — ordered dithering with Bayer 2×2/4×4/8×8 and hash noise patterns, with optional pixelation
- Smoothstep — soft threshold between two edges
- Domain Warp — fractal noise-driven UV distortion
- Glitch — digital glitch effects with block displacement, color channel shifting, and scanlines
- Kuwahara — painterly smoothing filter that preserves edges
- Pixel Sort — sort pixels by brightness/hue/saturation along rows or columns
- Scatter — randomly displaces pixels using noise-based offset
- Tunnel 3D — raymarched 3D tunnel fly-through with textured walls
Mixer
- Projector controls relocated into the Mixer panel with resolution and background settings
- Transition effects: wipe, radial, dark/light fade, checker, and lines
- Crossfade remapped through tangent curve for smoother response at extremes
- Removed redundant minimixer node
Enhancements
- Edge Detection — pixel/UV sample space option for resolution-independent behavior
- Tunnel 3D — phase accumulation for smooth speed transitions with start/stop/restart; shading option
- Scatter — density decoupled from copy scale
- Media nodes use textureSize() for dynamic aspect ratio — no recompile on source change
- Main Input texture uploads deduplicated to once per frame per GL context
- Sampling cost warnings on nodes that multiply upstream work — hover for details
- Mixer preview labels are clickable to jump to that workspace
- Save filename defaults to the active tab name
- Empty workspace cleaned up automatically if "load as new" produces no nodes
Visual Design
- Lucide SVG icons replace all Unicode/emoji iconography
- Unified chrome button styling: icon at rest, label slides out on hover
- Redesigned side panels with collapsible 30px headers and vertical labels
- Restyled modals, patch cards, context menus, and tab bar
- Redesigned asset manager to match app design system
- Toolbar actions consolidated into an app menu (native menu bar in Electron, dropdown in web)
- Typography normalized to generic monospace with unified line-height
- Consistent 4px spatial grid, 2px/4px border-radius convention throughout
Fixes
- Fixed texture binding order (activeTexture must precede bindTexture)
- Fixed in-place mutation of cached patch data on load
- Context menu scoped to editor area; fixed node placement offset
- Fixed H key (hide UI) to keep WebGL canvases rendering
- Fixed fullscreen on Linux/KDE to use native Electron API, preserving menu bar
- Fixed right-click on node header initiating drag
- Added Chromium flags and gl.flush() for Linux WebGL reliability
Platform
- macOS app menu shows "Silvia" instead of "Electron"
- Edit menu with undo/redo/cut/copy/paste
- Post-build packaging script with launchers, icons, and zip archives for Linux, macOS, and Windows
SILVIA_WORKSPACEenvironment variable for custom workspace paths on Linux
Other
- Renamed "Master" to "Main" and "patch" to "workspace" throughout the UI
- Illustrated howto guide with screenshots and keyboard shortcut reference
- Keyboard handlers guard against contentEditable targets
0.2.4 - Fixes, Builds for Win/Mac/Linux
Fix midi binding when selecting multiple inputs to bind. More consistently make invalid or unassigned Outputs/Channels as black. Update Output node "showing" status in some cases where it wasn't updated before.
0.2.3 - Fixes, Builds for Win/Mac/Linux
Fixes of some longstanding bugs, nothing new really:
- Brought back the menu bar, for easier true fullscreen on projector and general view options
- Added the github link
- Saves now persist custom ranges and steps in snumber inputs in nodes
- Fixed the counter node
- Output nodes now have a better "status" message for where they are projecting
- Unused mixer will inputs show as black disconnected and return to black when output closed.
- Fixed bug where midi learn box would be left stuck open
Silvia 0.2.2 Builds
Major Changes:
- Patch Loader Redesign (THANKS @cheryllium!)
- Audio Analysis Upgrades
- New frequency histogram visualization
- Per-band EQ controls (frequency + Q factor)
- Validation
- No longer blocks patches with errors
- Invalid asset paths cleared instead of failing
- WebGL Texture Errors Fixed
- Webcam node: black 1x1 fallback texture before camera starts
- Screen Capture node: black 1x1 fallback texture before capture starts
- Alt-menu resizing removed
- Ctrl+zoom working properly
Silvia 0.2 Windows Build
This is a "portable" Electron application. Unzip and use anywhere. The asset and patches folders will be made alongside the .exe. Silvia cannot read from other file locations so there is less attack surface for malicious patches.