Changelog · v1.0.5 → v2.4.0

Release Notes

Every version, every fix, every feature — sourced directly from the repository changelog.

MajorMinorPatch

v2.4.0

Minor2026-05-26

26 new workflow nodes, complete runtime extensions layer (Tiers 1–6), 3 critical bug fixes, and node ID cleanup.

Added
  • +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.
Fixed
  • ~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).
Changed
  • 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-18

HTTP Request node, Authenticode signing tools, canvas drag-trail fix, http_request UI freeze fix, and 5 Node Builder / load-dialog bug fixes.

Added
  • +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.
Fixed
  • ~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.
Documentation
  • 📄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-15

Exe build bug fixes — About dialog crash and LICENSE bundling.

Fixed
  • ~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-15

Settings dialog, EnvManager singleton, import/export settings, website examples, and thread-safety fixes.

Added
  • +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.
Fixed
  • ~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-14

Scripting Console theme fix and Windows "Unknown publisher" fix.

Fixed
  • ~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.
Changed
  • 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.
Documentation
  • 📄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-14

Unsaved-changes detection, port type mismatch warnings, and UX quality-of-life.

Added
  • +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.
Fixed
  • ~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-10

Subgraphs, live wire inspection, autosave, mini-map, canvas search, and execution timing.

Added
  • +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.
Fixed
  • ~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 Q2

Critical crash fixes: QScintilla import, Houdini socket threading, and headless server stability.

Fixed
  • ~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 Q2

Node Builder GUI, Scripting Console, and Python export/import.

Added
  • +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 Q2

Prism Pipeline overhaul — 40+ nodes covering the full Prism v2.1.0 API.

Added
  • +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 Q2

Prism Pipeline integration, Python Script node, While Loop, and utility node library.

Added
  • +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 Q1

Headless Action Nodes for Maya, Houdini, and Blender with action-list executor.

Added
  • +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 Q1

Recursive data pulling and topological execution engine.

Fixed
  • ~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 →