Repository navigation
Changelog
github-actions[bot] edited this page May 19, 2026
·
2 revisions
- macOS and Linux support — app now runs on all three platforms
- Platform-aware user data paths (macOS:
~/Library/Application Support/, Linux:~/.config/) - Windows unchanged — user data stays in install directory
- Built-in modules synced from app bundle on every launch (macOS/Linux)
- Custom modules preserved across updates on all platforms
- Replaced PowerShell zip with
adm-zip(pure JS, cross-platform) - Added DMG (macOS) and AppImage/deb (Linux) build targets
- Module properties panel auto-generated from
info.json"properties"field - Supports: string, number, bool, color picker, select, range slider, media browser, audio/camera device dropdowns
-
showWhenconditional visibility for dependent fields - Removed all hardcoded per-module property methods
- Canvas re-renders live when properties change
- Scene Settings only shown when no module is selected
- WebGL-accelerated green screen removal (GPU-powered, YCbCr color space)
- Chroma key settings per-instance in Properties panel
- Color picker for key color, sliders for similarity/smoothness/spill
- Color picker auto-repositions to stay within viewport
- Hide messages by prefix —
hideMessageStartingWithsetting filters bot commands - Fixed emote spacing and text rendering
- Fixed Kick emote text leaking as plain text
- Fixed images not rendering in editor or OBS
- Proper URL resolution and CORS handling
- Shows actual idle image in editor preview
- Fixed video module not looping
- Module manager auto-adds/removes from Config.Modules
- Updated Streamer.bot import for Kick emote fix
- License changed from MIT to LGPL-3.0
- Audio-reactive PNG avatar that switches between idle/talking poses
- Monitors microphone in configurable frequency range (85-300Hz for voice)
- Volume threshold with hold time to prevent flickering
- Optional blink overlay at configurable intervals
- Bounce animation on talk
- All settings per-instance in properties panel
- Media browser integration for image selection
- Settings → Modules tab for managing installed modules
- Install from .zip with SHA-256 file integrity verification
- Export custom modules as .zip packages for sharing
- Uninstall removes module and cleans up all scene references, auto-saves config
- Refresh Modules — hot-reload classes without restarting
- Open Modules Folder for quick access
- Palette visibility checkbox — hide modules from palette without removing
- Dynamic settings button in properties (removed hardcoded module list)
- Settings tab divider between system and module settings
- Installer preserves custom modules during Windows updates
- Arrow key movement — 5px (default), 20px (shift), 1px (alt)
- In-app Help panel (F1 or toolbar ❓ button)
- Canvas Settings dropdown with Lock to Canvas toggle
- Layer visibility toggle (eye icon)
- Canvas resizes when sidebar panels are toggled
- Settings panel fix — module tabs always appear from properties button
-
npm run screenshotsfor automated wiki documentation captures
- Fixed CSS gradient rendering using SVG foreignObject (pixel-perfect)
- Fixed border rendering (ridge/groove/etc) via CSS capture
- Fixed badge/text vertical alignment
- Added NameOnNewLine setting
- Fixed message overflow for all NewMessages + Position combinations
- Emotes persist across page reloads
- Chat simulation auto-spawns test messages on play
- Removed obsolete settings (BeforeCanvas, MessageArea, platforms)
- Fixed OS file drag-drop (webUtils.getPathForFile for Electron sandbox)
- Delete works in subdirectories
- Folder delete button
- Hidden
/media/prefix from breadcrumb
- Simulation logic moved into modules via
editorRegister()/{ _main, _simulator }pattern - Editor dynamically loads and registers simulators per instance
- Proper cleanup on delete, scene switch, and re-render
- New
editorClassfield in info.json - Developer Guide updated with new module authoring pattern
- CSS gradient rendering via SVG foreignObject for pixel-perfect output
- Border styles (ridge/groove/etc) rendered correctly
- Badge/text vertical alignment when badges are larger than font
- NameOnNewLine setting for username on separate line
- allowClipping — hide partial messages instead of visually clipping
- hideBots moved into ChatBoxes section
- Removed obsolete BeforeCanvas/MessageArea/platforms settings
- Cache invalidation on style config changes
- Settings panel module tabs fix
- openTo(tab) method for properties panel settings button
- Fix script load order (simulator.js before canvas.js)
- Play All button uses new async simulator API
- Dynamic settings tabs from module discovery
- Schema labels with tooltips
- Fixed OS file drag-drop
- Developer Guide and README documentation
- Modules now live in their own directories:
www/modules/{name}/ - Each module has an
info.jsonmanifest with metadata, schema, and entrypoint -
www/modules/modules.jsonis the master manifest mapping module names to their info files - The editor palette is built dynamically from discovered modules
- Third-party modules can be added by dropping a folder into
www/modules/
- Scene modules now use
_typefield to identify which module renders them - Draw order follows the scene config order (first entry = bottom layer, last = top)
- Multi-instance support: modules like
imageandvideocan have multiple instances per scene (e.g.chat_bg,chat_frame,cam_frame) -
allowMultipleflag in info.json controls whether the editor allows duplicates
- Chat module completely rewritten to render directly to canvas (no DOM elements)
- Supports: text-shadow, drop-shadow, linear-gradient backgrounds (multiple layers), borders, fit-content width, right-alignment
- Font size, family, padding, border-radius all read from config style object
- localStorage persistence for message history
- Live preview in editor with 💬 (test message) and 🗑 (clear) buttons
- New
webcammodule for live camera feed - Renders directly to canvas via
ctx.drawImage - Device selection dropdown in properties panel
- Mirror, mask (circle/rounded), and border-radius options
- Settings stored in global
Config.webcam -
--disable-features=MediaFoundationVideoCaptureflag for shared virtual camera access
- Dynamic palette: Built from module discovery, no hardcoded items
- Scene duplication: ⧉ button on active scene tab to clone a scene
- Scene rename: Double-click scene tab to rename (fixed click/dblclick conflict)
- Layer names: Simplified to icon + ID (removed redundant type text)
- Module IDs: Custom IDs now saved correctly to config (no longer overwritten with type_N)
- Image simulation: Images render in Play All mode
- WebSocket Admin tool: 📡 button in toolbar opens a panel to send raw messages to overlay clients for testing
- Chat preview: Live canvas-based preview with test message/clear buttons
- Media permissions: Auto-granted in Electron for camera/microphone access
- All
_typeand_item_typemetadata moved from config.js to module info.jsonschemafields - Config is now pure data — no metadata keys polluting the saved file
-
global.info.jsonholds schema for root-level config fields - TypeRenderer reads schema from module registry, falls back to legacy
_typein config
- Removed audio device selector from server settings (device is configured per-module now)
- OBS URL always includes
?allowaudio=true - Toolbar URL copy matches server settings
- Build script reads version from package.json instead of hardcoding it
- Installer preserves
www/media/andwww/config.jsduring updates - Build uses
config.example.jsas the release config (no personal data leaks)
- Removed debug console.log statements from audio visualiser
- Removed debug logging from media panel drag-drop
- Removed
chat.css(no longer needed — chat is canvas-based) - Removed split/separated chat mode