Changelog
All notable changes to Node Banana are documented here.
1.4.0 — 2026-02-24
Added
- OutputGallery node displays scrollable thumbnail grid with full-size lightbox viewer (#43 (opens in a new tab))
- ImageCompare node provides side-by-side image comparison with draggable slider (#43 (opens in a new tab))
- PromptConstructor node for template-based prompts with @variable placeholders (#43 (opens in a new tab))
- PromptConstructor expand modal with @variable autocomplete, variable pills, and resolved preview panel (#43 (opens in a new tab))
- Prompt nodes can be assigned variable names for use in PromptConstructor templates (#43 (opens in a new tab))
- AI chat panel for building and editing workflows through conversation (#43 (opens in a new tab))
- Workflow snapshot and revert system to undo AI-generated changes (#43 (opens in a new tab))
- Image connection sequence numbering for clearer multi-input ordering (#43 (opens in a new tab))
- Prompt node expand modal for full-screen editing with persistent font size preference (#43 (opens in a new tab))
- Audio Input node for loading audio files with waveform visualization (#51 (opens in a new tab))
- Video Stitch node for concatenating videos with drag-and-drop reordering and audio support (#51 (opens in a new tab))
- Ease Curve node for applying speed ramping and easing effects to videos (#51 (opens in a new tab))
- Kie.ai provider support for Sora, Veo, and Kling models (#51 (opens in a new tab))
- WaveSpeed provider for image and video generation (#51 (opens in a new tab))
- Parallel workflow execution for independent nodes at the same dependency level (#51 (opens in a new tab))
- New handle types: audio, video, and easeCurve for routing media between nodes (#51 (opens in a new tab))
- Model browser refresh button to manually clear model and schema caches (#53 (opens in a new tab))
- 48-hour localStorage caching for model lists and schema parameters to reduce API calls (#53 (opens in a new tab))
- 20MB upload size guard to prevent memory spikes when uploading images (#53 (opens in a new tab))
- Generate 3D node for AI-powered 3D model generation with text-to-3d and image-to-3d support (#66 (opens in a new tab))
- 3D Viewer node for displaying and interacting with GLB models, with orbit controls and snapshot capture (#66 (opens in a new tab))
- 7 grid configurations in Split Grid node, with layout-based selector showing visual previews and RxC labels (#66 (opens in a new tab))
- Execute selected nodes feature to run only selected nodes and their dependencies (#66 (opens in a new tab))
- Customizable canvas navigation settings for pan, zoom, and selection modes (#66 (opens in a new tab))
- Keyboard shortcuts dialog accessible via
?key or footer icon (#66 (opens in a new tab)) - Run button for LLM Generate nodes in title bar (#66 (opens in a new tab))
- Output node auto-executes when an edge is connected to it, and has a Run button in the header for manual re-execution (#85 (opens in a new tab))
- AI quickstart now recognizes all recently added node types (audioInput, promptConstructor, outputGallery, imageCompare, videoStitch, easeCurve, videoTrim, videoFrameGrab, glbViewer) and handle types (video, easeCurve, 3d), fixing validation failures for workflows using these nodes (#85 (opens in a new tab))
- Keyboard shortcuts dialog now lists
Shift+T(Add Audio node) andShift+R(Add Array node) (#85 (opens in a new tab))
Changed
- Chat performance improved for large workflows with smart data optimization (#43 (opens in a new tab))
- ConnectionDropMenu now supports auto-connecting OutputGallery, ImageCompare, and PromptConstructor node types (#43 (opens in a new tab))
- Output node now accepts video connections directly (#51 (opens in a new tab))
- fal.ai API key now required for fal.ai models (previously optional) (#51 (opens in a new tab))
- FloatingActionBar shows concurrent node count during parallel execution (#51 (opens in a new tab))
- fal.ai generation now uses async queue-based execution with polling instead of blocking requests (#53 (opens in a new tab))
- Base64 images are now uploaded to fal.ai CDN before submission to avoid large inline payloads (#53 (opens in a new tab))
- Split Grid settings modal now uses layout-based selection with visual previews and RxC labels (#66 (opens in a new tab))
- Split Grid settings modal width increased to 600px for better layout button spacing (#68 (opens in a new tab))
- Cost indicator now hidden when non-Gemini providers are present in workflow (#66 (opens in a new tab))
- 3D outputs use distinct orange handle color to differentiate from image and text connections (#66 (opens in a new tab))
Fixed
- PromptNode Enter key behavior now properly saves content (#43 (opens in a new tab))
- PromptConstructor textarea sizing now fills available node space (#43 (opens in a new tab))
- GPT Image 1.5 aspect ratio and parameter handling (#51 (opens in a new tab))
- Deduplicated model fetching to prevent duplicate API requests (#51 (opens in a new tab))
- Workflow save reliability with improved timeouts and parallel processing (#51 (opens in a new tab))
- WaveSpeed video generation now saves with correct file extension (#53 (opens in a new tab))
- Updated Kie and WaveSpeed provider badge icons for visual consistency (#53 (opens in a new tab))
- Video Stitch node now applies loop count (1x/2x/3x) when using the Stitch button (#58 (opens in a new tab))
- Prompt nodes remain editable when connected to LLM outputs (#66 (opens in a new tab))
- Video regeneration spinner no longer gets stuck after cancellation (#66 (opens in a new tab))
- New image uploads now properly save when a node already has a saved image reference (#66 (opens in a new tab))
- Array input unwrapping for provider APIs when multiple images are connected (#66 (opens in a new tab))
- Prompt text from connected Prompt nodes now correctly passes through to Replicate and fal.ai APIs when image inputs are also connected (#85 (opens in a new tab))
- Model schema now resolves
anyOf/oneOf/allOfwrappers, fixing connectable handle detection for nullable image/text inputs (#85 (opens in a new tab)) - Workflow JSON files no longer include the absolute
directoryPathfield, preventing local filesystem paths from being exposed when sharing (#85 (opens in a new tab)) - Path traversal protection added to workflow file API routes — paths containing
..sequences or targeting system directories are rejected (#85 (opens in a new tab)) - Array node regex split mode now detects nested quantifier patterns that cause catastrophic backtracking (ReDoS) (#85 (opens in a new tab))
- Array node edge indices now wrap via modulo when item count decreases, preventing downstream nodes from silently receiving no data (#85 (opens in a new tab))
- Save As failure no longer permanently marks the workflow as unsaved (#85 (opens in a new tab))
- Video blob URL memory leak fixed when rapidly changing video sources (#85 (opens in a new tab))
- Image dimension detection now has a 10-second timeout, preventing indefinite hangs if load events never fire (#85 (opens in a new tab))
1.3.0 — 2026-01-31
Added
- Prompt nodes can now receive text connections for LLM-to-Prompt chaining (#38 (opens in a new tab))
- LLM node collapsible parameters, copy-to-clipboard, and max tokens setting (#38 (opens in a new tab))
Changed
- Community workflows migrated from Git LFS to R2 storage on node-banana-pro (#35 (opens in a new tab), #37 (opens in a new tab))
Fixed
- Cursor jumping when typing in prompt nodes (#37 (opens in a new tab))
- Connection handling for indexed handles like
text-0,image-0(#37 (opens in a new tab)) - Video node validation now requires text input (#37 (opens in a new tab))
- Drag selection incorrectly including distant nodes (#38 (opens in a new tab))
- Multiple image inputs overwriting instead of aggregating into arrays (#40 (opens in a new tab))
- Directory path normalization on macOS network volumes (#41 (opens in a new tab))
- Race condition causing duplicate workflow executions when rapidly triggering execution (#42 (opens in a new tab))
Removed
- Local community workflow files (~424MB) in favor of remote storage (#35 (opens in a new tab))
1.2.0 — 2026-01-20
Added
-
Comment Navigation System — Navigate between nodes with comments using Previous/Next controls (#33 (opens in a new tab))
- Header icon with unviewed comment count badge
- Previous/Next navigation arrows in comment tooltips
- Tooltips show comment preview on hover
- View tracking highlights unread comments
- Auto-centering viewport on navigation
- Comments sorted by position (top-to-bottom, left-to-right)
- New
useCommentNavigationhook with full test coverage
-
Output Node Enhancements — Custom filename support and auto-directory creation (#33 (opens in a new tab))
outputFilenameparameter for custom output filenames- Auto-create
/outputsdirectory option - Automatic saving to
/outputswhen workflow has project path - Custom filenames sanitized (special chars replaced with underscores)
-
Image Paste Support — Paste images directly from clipboard into imageInput nodes (#33 (opens in a new tab))
- Press Cmd+V (Mac) or Ctrl+V (Windows/Linux) to paste images
- Updates selected imageInput node or creates new node at viewport center
- Automatic dimension extraction and timestamp-based naming
-
Community Workflows Enhancements — Rich metadata system for template explorer (#33 (opens in a new tab))
- Centralized metadata config system (
communityWorkflows.ts) - Extended metadata: description, tags, preview images, sort order
- Template card reuse for consistent styling across all workflows
- Tag filtering now works for community workflows
- Search includes workflow descriptions
- Community workflow thumbnails in
/template-thumbnails/community/ - Node count badge moved inline with tags
- Centralized metadata config system (
Changed
-
External Image Storage — Now persists in workflow configuration (#33 (opens in a new tab))
useExternalImageStoragefield saved in workflow JSON- Setting persists across sessions (previously in-memory only)
- Automatic image ref clearing when saving to different directory
- New workflow ID generated when changing save directory
-
Node Dimension Handling — Nodes preserve user-set height on resize (#33 (opens in a new tab))
- New
calculateNodeSizePreservingHeight()utility - Aspect ratio changes only adjust width, preserving manual height adjustments
- Applied to GenerateImageNode and GenerateVideoNode
- New
-
Comment Tooltips — Enhanced positioning and navigation UI (#33 (opens in a new tab))
- Tooltip position updates continuously during canvas pan/zoom
- Uses
requestAnimationFramefor smooth tracking - Centered above comment button (changed from right-aligned)
- Includes Previous/Next navigation controls
-
Video Detection — Improved video content recognition (#33 (opens in a new tab))
- Now detects
fal.mediaURLs (fal.ai video URLs) - Checks for
data:video/prefix and.mp4/.webmextensions - Output nodes correctly distinguish image vs video content
- Now detects
-
Model Selection — Gemini generation uses
selectedModel.modelIdwhen available (#33 (opens in a new tab))- Falls back to legacy
modelfield for backwards compatibility - Ensures correct model selection in multi-provider workflows
- Falls back to legacy
Fixed
-
Image History Improvements — Additional fixes for edge cases (#33 (opens in a new tab))
- Image history race condition causing duplicate images resolved
- Image history IDs now preserved when saving to new directory
outputImageRefvalidation against selected history index on save- Missing image files return 200 with
notFoundflag instead of 404 (prevents Next.js error overlay)
-
Video Output Connections — Fixed video output node connection handling (#33 (opens in a new tab))
- Video connections now properly recognized and displayed
- Improved content type detection for video formats
-
Node Styling — React Flow default styles no longer leak into output nodes (#33 (opens in a new tab))
Removed
- Deprecated Examples — Removed obsolete contact sheet workflows (#33 (opens in a new tab))
- Removed
examples/contact-sheet-jpow.json - Removed
examples/contact-sheet-tim.json - Added
Fashion-image-to-video.jsonexample (tracked with Git LFS)
- Removed
1.1.0
Added
-
Template Explorer UI — Redesigned visual template browser with preview capabilities (#30 (opens in a new tab))
- Two-column card layout with category filtering
- Template thumbnails with hover transitions showing workflow screenshots
- Grid layout with sidebar filter panel
- Interactive workflow diagram preview
- Category and provider filtering
-
Node Defaults — Set default models for Generate Image and Generate Video nodes per project (#30 (opens in a new tab))
- New Node Defaults tab in Project Setup modal
- Quick model picker integrated into defaults configuration
- Persistent storage saved per-project via localStorage
- New nodes automatically use configured defaults
-
Cost Tracking Improvements (#30 (opens in a new tab))
- Provider-grouped breakdown in Cost Dialog
- Added Gemini model pricing data
- fal.ai pricing integration with model cost display
- Dollar format always shown for clarity
- Direct links to external provider pricing pages
-
Multi-Provider Support — Support for Replicate and fal.ai providers alongside Gemini (#25 (opens in a new tab))
- Provider abstraction layer with unified interfaces
- Per-provider API key management in Project Settings
- Model discovery endpoint aggregating models from all providers
- Model search dialog with provider filtering and recently used tracking
-
Video Generation — New GenerateVideoNode for AI video generation (#25 (opens in a new tab))
- Video playback in OutputNode with format detection
- Carousel controls for video history navigation
- Video generation queue system with 10-minute timeout
-
AI Quickstart Feature — Generate complete workflows from natural language descriptions
- Welcome screen with preset templates and custom description input
- 6 preset workflow templates: Product Shot, Model + Product, Color Variations, Background Swap, Style Transfer, Scene Composite
- Content level selector (empty/minimal/full) to control pre-filled detail
- Gemini LLM-powered custom workflow generation
- JSON validation and repair for generated workflows
- Sample images for templates in
/public/sample-images/
-
Test Suite — Comprehensive testing with Vitest
- 108+ tests covering quickstart templates, validation, and prompts
- 90%+ code coverage for quickstart module
- Run with
npm testornpm run test:coverage
-
Node Expansion & Run — Expand nodes to full-screen modal and run individual nodes
-
Group Locking — Lock node groups to skip them during workflow execution
-
Image Carousel — Browse through image history on generation nodes
Changed
-
GenerateImageNode — Replaced NanoBananaNode with unified GenerateImageNode (#25 (opens in a new tab))
- Provider and model selector dropdown
- Dynamic input handles based on model schema
- Custom model parameters UI with validation
- Image-to-image support across all providers
- Legacy workflows automatically migrate
-
UI Improvements — Redesigned node handles and error display (#25 (opens in a new tab))
- Node handles match reference UI with aligned connection points
- Error overlay on generate nodes with toast notifications
- Auto-resize for generate nodes on output
- Streamlined header with visual grouping
Fixed
- Image History Critical Fixes — Resolved race conditions and duplicate image issues (#30 (opens in a new tab))
- Workflow saves now wait for pending image ID syncs to complete
- Store nodes receive refs after externalization, preventing duplicate files on save
- Carousel IDs properly synced with saved filenames
- fal.ai 429 rate limit errors from excessive pricing API calls (#30 (opens in a new tab))
- Template gallery scrolling and wheel event propagation with React Flow (#30 (opens in a new tab))
- Thumbnail quality improved with 288px resize and fixed object-fit (#30 (opens in a new tab))
- Run button and global modal state issues
- Carousel image inversion
- Two-finger pan behavior on Mac
- Comment tooltip z-index issues
- Duplicate input images for generateVideo nodes (#26 (opens in a new tab))
- Connection handling now finds first unoccupied input handle instead of always targeting the first one (#26 (opens in a new tab))
- Gemini model parameters (aspectRatio, resolution, useGoogleSearch) now display correctly when Gemini models are selected (#26 (opens in a new tab))
- Connection drop menu now works with dynamic handles (#25 (opens in a new tab))
- Drag-connect node creation and handle persistence bugs (#25 (opens in a new tab))
1.0.0 — Initial Release
Added
- Visual Node Editor — Drag-and-drop canvas with pan, zoom, and multi-select
- Image Input Node — Load images from local filesystem
- Prompt Node — Text input for prompts and descriptions
- Annotation Node — Full-screen drawing tools (rectangles, circles, arrows, freehand, text)
- Nano Banana Node — AI image generation using Google Gemini models
- LLM Generate Node — Text generation with Gemini and OpenAI models
- Output Node — Display and download results
- Split Grid Node — Divide images into grid cells
- Workflow Management — Save and load workflows as JSON files
- Connection Validation — Type-safe connections (image-to-image, text-to-text)
- Multi-Image Input — Connect multiple images to generation nodes
- Cost Tracking — Monitor API usage and spending
- Keyboard Shortcuts — Efficient workflow navigation and editing
- Node Groups — Organize related nodes together
- Auto-save — Automatic workflow saving
Roadmap
Features being considered for future releases:
- Custom node creation
- Workflow sharing and community library
- More AI model integrations
- Batch processing improvements
- Plugin system
- Mobile-responsive canvas
For the latest updates, check the GitHub repository (opens in a new tab).