- globals: define
{{variable_name}}tokens and use them in any text field across your graph; values cascade through three tiers (settings, graph properties, graph nodes) so you can set defaults globally and override per-graph or mid-flow- new
graph/node category withglobal_set,global_get,global_list, andglobal_resetfor working with globals inside the graph graph/argsnode (migrated from utility) for accessing graph arguments
- new
- graph properties overhaul: field labels now display their token names (
graph_title,graph_description, etc.) so you can reference them as globals; add custom fields that participate in the same cascade - Save All via
Ctrl+Shift+Ssaves every dirty tab at once; Save As moved toShift+Alt+S - redesigned tab bar: darker background, pipe separators, active tab gets rounded top corners with an accent color bar and canvas-matching fill;
.xtudioextension stripped from labels; close buttons hidden by default (toggle in settings) - port binding system: input ports now show their state at a glance (hollow = unbound, filled = hardcoded, circle = wired, diamond = multi-wire); click any port dot to bind, unbind, or wire without dragging
- hovering a node in the bind menu highlights it on the canvas so you know what you’re connecting to
- duplicate node types show a
#xxxxdiscriminator so you can tell them apart
- multi-edge fan-in: feed multiple edges into a single input port and choose how they resolve (last truthy, first truthy, priority order, random, or merge)
- merge is type-aware: concatenates text, sums numbers, ORs booleans, deep-merges JSON
- strategy and priority order configurable from the port dot menu
- five layout algorithms: right-click the canvas and pick from Compact Sugiyama (new default with crossing minimization), Native Stacking, Force-Directed, Orthogonal, or Radial; all respect grid snapping
- node card improvements
- two-axis resize: drag right edge, bottom edge, or corner; preview area scales to fill the extra space
- double-click the left side of a node title to rename, right side to collapse/expand
- Copy Output and Save Image in the node right-click menu
- port labels shift color to reflect state: lightened type color when bound, bright when hardcoded
- tooltips only appear after a 1.5s hover delay on the title
- right-click any text field for cut, copy, paste, select all, and clear
- updated accent colors to match the site (blue
#6aa3f0, pink#ea5da3); tighter card rounding across the board - device connectivity: new
device/node category with 15 nodes for talking to hardware directly from your graph; serial ports, Bluetooth Low Energy, GPIO and I2C via Firmata, and aprint_labelnode that dithers images to 1-bit and sends ESC/POS to thermal printers- serial primitives: list available ports, open, write, read, close
- BLE: scan, connect, write, read, disconnect
- Firmata: GPIO set/read, I2C write/read
- tag-based node search: every node now carries search tags (synonyms and semantic groupings) so searching “save” finds both
io/write_fileandimage/save; NodePicker upgraded from substring matching to full fuzzy search with tag support - label printing:
print_labelprints to TSPL2 label printers (Nelko P21 and similar) over Bluetooth serial; configure label size, density, rotation, copy count, and bit inversion - receipt printing:
print_receipthandles ESC/POS thermal printers; BLE receipt printers auto-detect their service and characteristic UUIDs ble_list_servicesnode for discovering what services and characteristics a connected BLE device exposesdisconnect_allreleases every connection the app opened (serial and BLE) without restarting; leaves system devices alonelist_portsnow shows Windows device names (e.g. “Standard Serial over Bluetooth link”) so you can tell which port is which- device log panel: scan, connect, and print operations stream real-time progress to the log panel
- node timeout protection: stuck nodes get a 35-second safety net; timeout error instead of a frozen UI
- system font support:
drawing/textaccepts system font names like “Arial” or “Segoe UI” directly; no file path needed - “Copy all” in the log panel copies every visible entry to clipboard
- Ctrl+C in previews copies your text selection instead of copying graph nodes
drawing/htmlandsvg/rendernow re-render when inputs change instead of showing stale content- dropped auto-connect when dropping new nodes onto the graph
- “Run selected” evaluates exactly what you selected; no longer triggers downstream nodes
Changelog
Release history for epixtudio
- color picker now supports alpha/transparency with a dedicated slider, hex output includes the alpha channel when not fully opaque
- node documentation regenerated to include all latest node updates and corrected port hints
- elements: 14 new UI control nodes (button, text input, textarea, label, checkbox, select, radio, slider, color picker, progress bar, image, container, tabs, and form) for building interactive interfaces directly in the graph
- the form node assembles controls into a complete interactive document with light/dark theming and custom CSS
- live preview window lets you interact with forms and feed events back into the graph
- compile a graph with a form node and the output is a standalone desktop app where the form is the UI
- event listeners now support dynamic channel names wired from upstream nodes, so you can route events programmatically
- run selected now evaluates only the selected nodes, using cached results for upstream inputs; no accidental re-triggering of file writes or deletes upstream
- shift-click a node to visualize its entire upstream dependency chain with a cascading glow pulse; ctrl-shift-click to also select all nodes in the chain
- new
image/to_ansinode converts images to ANSI terminal art with multiple rendering modes and color output options - ANSI output now renders as a live terminal preview instead of raw escape codes
- color inputs now open a full color picker; also available standalone from View > Color Picker
- file path inputs no longer mangle Windows backslashes; the browse button now opens to the folder of the current value
- text inputs now have an expand toggle (▸/▾) to switch between single-line and multiline editing
- fixed brief error flashes on nodes downstream of frontend-rendered nodes
- Google Fonts now fully download before the first render, fixing missing fonts on initial captures
- fixed license key verification
- graph compiler: compile your graph into a standalone Node.js script, a reduced single-file build, or a native executable with a custom icon
- batch execution: run a graph over a list of inputs with progress tracking; new
batch_inputandbatch_collectnodes handle the plumbing - audio nodes: 8 new nodes for generating waveforms, visualizing audio, mixing channels, and exporting WAV files
- expression node: write live reactive formulas that reference other node outputs by name
- watch panel: monitor node output values in a live table without clicking through each node
- command palette:
Ctrl+Shift+Popens a searchable overlay for every action, keyboard shortcuts listed alongside - undo history panel:
Ctrl+Shift+Hshows a visual timeline; jumping to a point briefly glows affected nodes green, amber, or red - graph statistics:
Ctrl+Ifor node counts, category distribution, connectivity metrics, and per-node eval timing - canvas and wiring improvements
- wire reroute nodes for cleaner complex graphs
- edge splice (double-click a wire to insert a node inline)
- auto-wire suggestions when placing nodes near compatible ports
- edge selection and batch delete
- port type badges on connections
- snap-to-alignment guides and an equal spacing tool
- node quality of life
- rename nodes with a double-click
- collapse nodes to just their header
- custom node colors via the context menu
- save and load configuration presets per node type
- quick node replacement (swap type, keep connections)
- documentation tooltips on hover
- execution order badges
- clipboard and export
- copy/paste nodes as JSON, even across graphs
- paste images from the system clipboard into image nodes
- export the canvas view as PNG
- navigation and search
- find nodes on canvas with result highlighting and jump-to-node
- enhanced fuzzy search across type IDs, categories, descriptions, and port names
- recent files in the welcome dialog and file menu
- canvas text annotations: freeform labels anywhere on the graph for documentation
- graph metadata: title, description, author, and tags stored with each graph
- xript packages: bundle custom nodes into
.xpkgfiles for sharing and import - app data backup and restore: export and import settings, presets, and group definitions
- accessibility: respects system motion preferences; overlay dialogs trap focus for screen readers
- keyboard shortcut customization: remap any shortcut from settings
- context menu submenus: node actions organized into Arrange and Group submenus
- background task notifications: desktop notifications when long evaluations finish
- in-app feedback: submit bug reports and feature requests without leaving the app
- 227 built-in nodes across 19 categories (up from 190 in v0.1.0)
- canvas-based node editor with pan, zoom, grid snapping, box selection, and multi-node drag
- 190+ built-in nodes across 17 categories: math, text, logic, data, transform, image, drawing, color, format, crypto, debug, io, net, event, flow, group, and utility
- real-time output preview at every node in the graph
- type-safe port connections with live compatibility feedback during drag
- type coercion across compatible types (e.g. number to text) with visual indicators on converted edges
- node grouping and subgraphs with drill-in editing, breadcrumb navigation, and reusable group definitions
- loop and iteration nodes: for_each, for_range, while, and repeat with per-iteration input injection
- drawing primitives: rectangle, ellipse, line, text rendering, and image compositing inside the graph
- HTTP request node for fetching APIs and web data directly inside a graph
- conditional routing via select, gate, and compare nodes
- CSV parsing, table manipulation, JSON path queries, and tabular data helpers
- image crop, resize, rotate, flip, brightness, contrast, blur, sharpen, grayscale, invert, and composite nodes
- file system utilities: file existence checks, path join/parse, and shell command execution
- encoding and hashing: base64, URL encode/decode, HTML encode/decode
- full undo/redo with crash recovery and automatic session persistence
- auto-save with configurable interval
- drag-and-drop file open with
.xtudiofile association - native app menu bar with platform-appropriate keyboard shortcuts
- dark and light theme toggle
- canvas minimap for navigating large graphs
- find and navigate to any node on the canvas
- node enable/disable bypass toggle
- copy-paste nodes as JSON via system clipboard
- graph validation with warnings and diagnostic logging
- graph execution cancellation and timeout support
- in-app documentation, hotkey reference, and changelog viewer
- execution log panel and output console
- xript extensibility system with in-app custom node authoring via QuickJS WASM sandbox
- auto-layout and zoom-to-fit
- keyboard shortcuts panel and quick search
drawing/htmlnode: renders HTML/CSS/JS to an image with CSS isolation, transparent background, auto-trim, and Google Fonts support via a dedicatedfontsinput- stale node detection and one-click upgrade when node definitions change
- tab name now restored correctly on session reload
- image previews centered in node cards and inspector
- CSP opened for external stylesheets, fonts, and images to support user-authored HTML content