Release Notes
Every version, every fix, every feature — sourced directly from the repository changelog.
v2.4.0
Minor2026-05-2626 new workflow nodes, complete runtime extensions layer (Tiers 1–6), 3 critical bug fixes, and node ID cleanup.
- +3 generic MCP client nodes: mcp_server_init, mcp_list_tools, mcp_call_tool — connect any MCP server from inside a workflow.
- +23 Houdini AI nodes: hou_mcp_scene_context, hou_mcp_build_node_chain, hou_mcp_transaction, hou_mcp_graph_diff, hou_mcp_ai_plan, hou_mcp_ai_preview, hou_mcp_ai_execute, hou_mcp_ai_review, and 15 more analytics, semantic, and distributed orchestration nodes.
- +Complete src/runtime/ module: MCP client sessions, transaction system, AI planning pipeline, Tier 5 advisory analytics, Tier 6 MCP server — 40+ modules spanning Tiers 1–6.
- +scripts/run_vibrante_mcp.py — MCP stdio server entry point. Claude Desktop / Codex CLI / Cursor integration via 12 semantic tools.
- +New bridge methods: bridge.get_selection() (selected node paths) and bridge.network_summary(path) (children with metadata in one round-trip).
- +MCP shutdown hook in MainWindow.closeEvent — prevents stdio subprocess leaks on app exit.
- +list_images_recursive utility node.
- +Linux packaging: pyproject.toml, setup.py, MANIFEST.in, linux/ directory (pip, AppImage, .deb).
- +vibrante_node Python package (vibrante_node/__init__.py, vibrante_node/app.py).
- +70+ new unit test files covering the entire runtime layer.
- ~build_node_chain: topological sort ensures parent nodes are created before their children; actual_by_expected map handles Houdini name-collision renaming.
- ~review_execution: match_score was always 0.0 when operations_executed was absent from the result dict; now falls back to 1.0 when status == "committed".
- ~preview_execution MCP tool: ImportError — wrong import name (get_predictive_execution → get_predictive_engine).
- ↑Node ID renames for consistency: add→math_add, subtract→math_subtract, divide→math_divide, modulo→math_modulo, lowercase→string_lowercase, uppercase→string_uppercase, replace→string_replace, split→string_split, append_file→file_append, write_file→file_write, random_float→example_random_float.
- ↑test_all_workflows.py: auto-discovers plugin node directories so new DCCs need zero test changes.
- ↑test_settings_persistence.py: config writes now isolated to per-test temp path.
- ↑concat and multiply nodes removed (no direct replacement; use string/math alternatives).
- ↑mcp>=1.0.0 added to requirements.txt.
v2.3.0
Minor2026-05-18HTTP Request node, Authenticode signing tools, canvas drag-trail fix, http_request UI freeze fix, and 5 Node Builder / load-dialog bug fixes.
- +http_request node bundled in nodes/ (Network category) — async GET/POST via urllib.request + loop.run_in_executor; non-blocking; inputs: url, method, headers, body, timeout; outputs: response_data, status_code, response_text, success.
- +tools/create_dev_cert.ps1 — create and locally trust a self-signed Authenticode certificate for testing; removes "Unknown publisher" on the local machine.
- +tools/sign_release.ps1 — sign the built exe with the best available cert in the user cert store; pass -Thumbprint to target a specific cert.
- ~Canvas drag trail artifact — NodeWidget.boundingRect() expanded ±8 px to cover port connectors; shape() overridden for correct rubber-band/click hit-testing; paint() uses local QRectF for body drawing.
- ~http_request UI freeze — entire HTTP stack (DNS, TCP, TLS, body) moved to OS thread pool via loop.run_in_executor; Qt main thread stays responsive.
- ~Node Builder: exec port type corruption on edit round-trip — exec_in/exec_out filtered from port tables in _load_existing_node, _sync_code_to_ui, and save_node.
- ~Node Builder: port default values silently zeroed on edit — tables expanded to 5 columns; Default column read/written through every round-trip.
- ~Node Builder: icon-path field triggered full code regeneration — dedicated _sync_icon_to_code() replaces only the self.icon_path = … line.
- ~Load Node From JSON: wrong start directory and no content pre-check — starts in nodes_dir; detects and rejects workflow files with a specific error message.
- ~Load Workflow: silently accepted node JSON files — _looks_like_node_json() helper rejects node definitions before model_validate_json with a clear error.
- 📄Full HTML docs regenerated to v2.3.0 (44 files, 0 errors).
- 📄CLAUDE.md: sections 10.31 (http_request freeze fix) and 10.32 (canvas drag trail fix) added.
- 📄README: node library count updated to 167+; Latest Release section updated.
v2.2.1
Patch2026-05-15Exe build bug fixes — About dialog crash and LICENSE bundling.
- ~About dialog crash (`AttributeError: 'QTextEdit' object has no attribute 'setOpenExternalLinks'`) — changed license display widget from QTextEdit to QTextBrowser in src/ui/window.py.
- ~LICENSE file not displayed in exe About dialog — added ('LICENSE', '.') to PyInstaller datas so the file is bundled in _internal/.
v2.2.0
Minor2026-05-15Settings dialog, EnvManager singleton, import/export settings, website examples, and thread-safety fixes.
- +Settings dialog (src/ui/settings_window.py) — Edit → Preferences (Ctrl+,). Four pages: Python Runtime, Application Paths, Environment Variables, Vibrante Variables (read-only). Persists to ~/.vibrante_node_config.json. Applies changes immediately on OK.
- +EnvManager singleton (src/utils/env_manager.py) — centralized manager for VIBRANTE_PYTHONPATH, v_nodes_dir, v_scripts_path, and custom os.environ variables. initialize() called at startup.
- +Import/Export settings to JSON — Import Settings… / Export Settings… buttons in the Settings dialog. Round-trip portable format for cross-machine deployment.
- +website_examples/ — 10 production-quality example node JSON files: regex_replace, http_request, file_batch_processor, email_notification, database_query, image_resizer, llm_text_generation, folder_monitor, hou_sop_chain, prism_multi_asset_publisher.
- +4 new test files: test_env_manager.py, test_reactive_propagation.py, test_settings_persistence.py, test_website_examples.py. Total: 142 tests.
- ~Qt thread-violation crash when typing in a node text input wired to a downstream node — _propagate_all_outputs() was called from the AsyncRuntime background thread. Fixed with _MainThreadDispatcher(QObject) + pyqtSignal(object) + Qt.QueuedConnection.
- ~Settings changes not applied in the same session — _open_settings() discarded the exec_() return value. Now checks QDialog.Accepted and triggers node registry reload + library panel refresh + scripts menu rebuild.
v2.1.1
Patch2026-05-14Scripting Console theme fix and Windows "Unknown publisher" fix.
- ~Scripting Console theme not applied on switch — code editor, debug output, and Git status panels now correctly transition between dark and light themes via new ScriptingConsole.apply_theme(is_dark) method.
- ~Windows 11 "Unknown publisher" on exe launch — added file_version_info.txt (PyInstaller VSVersionInfo format) embedded via version= in vibrante_node.spec, stamping company name, product name, version 2.1.1.0, and copyright into the exe's VERSIONINFO resource.
- ↑plugins/houdini/LICENSE added — standalone commercial license for the Houdini integration plugin, separate from the core open-source LICENSE.
- ↑About Vibrante-Node Integration dialog in Houdini now displays the plugin license text.
- ↑Contact email standardised to [email protected] across all files.
- ↑Official website https://vibrante-node.com added to relevant locations.
- 📄All HTML docs (docs/) regenerated to v2.1.1.
- 📄All portal HTML docs (docs/portal/) regenerated to v2.1.1.
- 📄docs_src/ markdown sources updated to v2.1.1 titles, headers, and footers.
- 📄tools/build_docs.py — added v2.1.1 & v2.1.0 to RELEASE_DOCS.
v2.1.0
Minor2026-05-14Unsaved-changes detection, port type mismatch warnings, and UX quality-of-life.
- +Unsaved Changes Detection — every workflow tab tracks dirty state. A * prefix marks modified tabs; closing a dirty tab or the application shows Save / Discard / Cancel.
- +Port Type Mismatch Warning — connecting incompatible port types logs a warning to the log panel. Connection is still allowed; any-typed ports are always compatible.
- ~F5 / Shift+F5 keyboard shortcuts were wired to tooltips but never registered as key bindings — now correctly registered via setShortcut().
- ~Loading a saved workflow incorrectly set _dirty = True, marking tabs with * on open — now suppressed via _undoing guard in from_workflow_model().
- ~Autosave tab name now strips "* " dirty prefix before writing, preventing restored tabs from showing [Recovered] * name.
- ~Autosave-restored tabs now correctly start as dirty since recovered content is unsaved crash data.
v2.0.0
Major2026-05-10Subgraphs, live wire inspection, autosave, mini-map, canvas search, and execution timing.
- +Subgraph / Group Node (Ctrl+Shift+G) — collapse selected nodes into a GroupNode. Double-click to open in a fully editable subgraph tab with real-time sync-back.
- +Live Wire Value Inspector — hover over connected wires to see the last value that flowed through, capped at 300 chars.
- +Autosave & Crash Recovery — 2-minute autosave to ~/.vibrante_node_autosave.json; restore dialog on next launch.
- +Recent Files — File → Open Recent submenu, last 10 workflows, grayed-out if file deleted.
- +Canvas Search Bar (Ctrl+F) — floating search over node names/IDs; Enter/▼ cycles matches.
- +Mini-map (Ctrl+M) — 200×150 thumbnail in canvas corner; click/drag to pan; viewport indicator.
- +Node Execution Timing — log panel shows "Node 'X' finished in Y.XXs" after each node.
- +Export / Import Python — convert workflows to executable Python scripts and back.
- +Script Editor dialog — standalone code editor for quick scripting outside the console.
- ~GroupNode exec_fail port fires only on unhandled exceptions, not on semantic failures.
- ~GroupIn injection uses parameters["_injected_value"] not parameters["value"] to avoid race with engine clear_outputs().
- ~UUID comparison in group collapse uses str(instance_id) consistently.
- ~KeyboardInterrupt no longer crashes the app on Ctrl+C during execution.
v1.8.5
Patch2026 Q2Critical crash fixes: QScintilla import, Houdini socket threading, and headless server stability.
- ~code_editor.py — ImportError on missing QScintilla no longer crashes startup; fallback QPlainTextEdit-based CodeEditor used instead.
- ~hou_bridge.py — socket fixes: TCP_NODELAY (removes ~40 ms Nagle delay on Windows), threading.Lock per instance, 30 s socket.timeout, auto-reconnect on BrokenPipeError.
- ~vibrante_hou_server.py — AttributeError on hou.playbar.frameRange() in headless Houdini caught; OperationFailed on unsupported flags caught; threading.Lock prevents double-bind.
- ~window.py — Houdini nodes and scripts now load correctly; load_all_with_extras replaces load_all; _populate_scripts_menu() reads v_scripts_path.
v1.8.4
Minor2026 Q2Node Builder GUI, Scripting Console, and Python export/import.
- +Node Builder GUI — visual interface for creating node JSON definitions without writing JSON by hand.
- +Scripting Console — interactive Python REPL with full access to the window and scene context.
- +Script Editor dialog — full-featured code editor with QScintilla (Python syntax, autocomplete).
- +Export to Python / Import from Python — round-trip workflow ↔ Python script conversion.
v1.7.0
Minor2026 Q2Prism Pipeline overhaul — 40+ nodes covering the full Prism v2.1.0 API.
- +Prism Pipeline overhaul — 40+ Prism nodes covering assets, shots, sequences, products, media, scenes, and export paths.
- +prism_core_init auto-bootstrap — place anywhere in the graph; engine detects and calls before execution.
- +resolve_prism_core() utility — auto-wires PrismCore to all prism_* nodes from shared memory.
- +Prism v2.1.0 API compatibility — getShots() flat-list handling, corrected createProduct signature.
v1.6.0
Minor2026 Q2Prism Pipeline integration, Python Script node, While Loop, and utility node library.
- +Prism Pipeline Integration — initial Prism node set.
- +Python Script Node — embed arbitrary async Python logic directly in a workflow.
- +While Loop Node — conditional looping with max-iterations guard.
- +Utility Node Library — string, math, list, dict, file, HTTP, JSON, timer, and random nodes.
v1.5.0
Minor2026 Q1Headless Action Nodes for Maya, Houdini, and Blender with action-list executor.
- +Headless Action Nodes — Maya, Houdini, and Blender action-list builder nodes for offline DCC execution.
- +Headless executor dispatches action lists to DCC runner scripts inside the target DCC process.
- +Deadline integration nodes — submit Maya, Houdini, and Blender render jobs directly from the graph.
v1.0.5
Patch2026 Q1Recursive data pulling and topological execution engine.
- ~Recursive data pulling — nodes automatically pull latest values from upstream data-only nodes before execution.
- ~Topological execution engine introduced; replaced naive sequential execution.
Full git history available on GitHub.
Download Latest →