shrimbly/node-banana

Free and open node based generative workflows.

TypeScript

1,616

2,344 commits

updated Oct 12, 2026

See the code

README

Node Banana

An Open Visual Workflow Editor for AI APIs

GitHub stars License Discord


Build AI image, 3D, audio and video generation pipelines by connecting nodes on a visual canvas.
Multi-provider support. Dynamic prompting features. Local, private, MIT, BYOK.


Download for Mac · Apple Silicon  •  Download for Windows · x64

Website  •  Documentation  •  Discord  •  All releases


Build Complex AI Pipelines Visually

Node Banana is a node-based workflow editor for AI media generation. Drag nodes onto an infinite canvas, connect them with typed handles, and execute pipelines that call AI APIs in dependency order.

  • Build dynamic prompts with variables, LLM/VLM-powered prompt construction, and reusable prompt chains
  • Generate workflows from natural language or choose from preset templates
  • Chain multiple AI models together across providers in a single pipeline
  • Generate images, video, 3D models, and audio from a single workflow
  • Annotate and edit images with a full-screen drawing editor
  • Save and share workflows as portable JSON files

Features

FeatureDescription
Desktop appA signed Mac app (Apple Silicon) and a Windows installer (x64) that update themselves. Keys are encrypted at rest; workflows and media stay on your disk
AgentA chat window that builds workflows, edits the canvas and changes node settings, running on your own Claude Code or Codex (ChatGPT) subscription through the vendor's CLI, never on API credits
Asset libraryEverything you generate is saved as it is made and browsable in the Assets view, with filters, favourites, tags, and the workflow that made it
Dynamic PromptingBuild prompts with variables, LLM-powered text construction, and reusable prompt chains that adapt per run and per input
Prompt to WorkflowGenerate complete workflows from natural language descriptions
Visual Node EditorDrag-and-drop nodes onto an infinite canvas with pan and zoom
Image GenerationGenerate images using Google Gemini, Replicate, fal.ai, Kie.ai, and more
Video GenerationGenerate video via AI API providers
Audio GenerationText-to-speech and AI audio generation
3D GenerationGenerate 3D models or use them as node inputs
Image AnnotationFull-screen editor with drawing tools (rectangles, circles, arrows, freehand, text)
Text GenerationGenerate text using Google Gemini, OpenAI, or Anthropic models
Workflow ChainingConnect multiple nodes to create complex multi-step pipelines
Group LockingLock node groups to skip them during execution
Batch runsRun a workflow or a group N times, with each output tagged by its run
Save/LoadCmd/Ctrl+S saves, autosave follows your edits, and workflows are portable JSON files

Supported Providers

ProviderStatus
Google GeminiFully supported
ReplicateSupported
fal.aiSupported
Kie.aiSupported
WaveSpeedSupported
ComfyUI (Comfy Router: Flux, GPT Image, Nano Banana, Seedream, Kling, Veo, Runway, LTX and more)Supported
OpenAILLM only

Getting Started

Install the desktop app

Download the installer for your platform from nodebanana.app: Mac (Apple Silicon, macOS 13 or later) as a signed and notarised DMG, or Windows (x64, Windows 10 or later) as an installer. The Windows build is not code-signed, so SmartScreen may warn on first run. The app keeps itself up to date from GitHub Releases; every release also lists SHA-256 checksums for its installers.

Then open Settings → Providers and paste the API keys for the providers you use. Node Banana calls those providers directly with your keys, and their usage is billed to you by them. Keys are stored encrypted in your OS profile; workflows and generated media are files in the Node Banana folder (Documents by default). See the desktop guide for data locations, logs, recovery and updates.

Run from source

Prerequisites

  • Node.js 18+
  • npm

Quick Start

git clone https://github.com/shrimbly/node-banana.git
cd node-banana
npm install
npm run dev

Open http://localhost:3000 in your browser.

npm run dev and npm start (after npm run build) listen on 127.0.0.1 only, and the API answers Node Banana's own page, not other websites. To reach the app from another device, set HOST=0.0.0.0 (for example HOST=0.0.0.0 npm start). Do that only on a trusted network or behind an authenticated proxy: the API reads and writes local workflow files and spends the provider keys in .env.local.

Local Electron app

Use Node.js 22.12 or newer for the Electron tooling. After npm install, launch the desktop development app:

npm run electron:dev

This opens Node Banana in an Electron window and starts its own local Next.js server. UI edits reload automatically. Restart the command after changing files in electron/. No separate npm run dev process is needed.

To run a production build locally:

npm run build
npm run electron:start

When running from source, the app reads the same .env.local as the browser version, and API keys can also be entered in Settings. Desktop settings use a separate persistent Electron profile; existing browser settings are not imported automatically. Workflows remain ordinary files that either version can open. Folder selection uses a native desktop dialog.

The desktop server binds to 127.0.0.1:47831 and only accepts authenticated requests from the Electron session. Set NODE_BANANA_ELECTRON_PORT to override the port if it is occupied. Keep that port consistent: browser storage is tied to the origin. NODE_BANANA_ELECTRON_USER_DATA can point to an alternate absolute profile directory. Electron development output lives in .next-electron, so the browser dev server can run separately.

Run npm run electron:smoke to check the real desktop window, editor interaction, local file save/load, native dialog bridge, settings persistence, and server shutdown using a temporary profile. It needs a graphical desktop (or Xvfb on Linux). Add -- --production to test an existing production build. These commands run from source. Use npm run electron:package for an unsigned Apple Silicon app, DMG and ZIP (--sign signs and notarises it; on Windows it makes the installer), and npm run electron:acceptance for packaged crash/recovery checks. See the desktop guide for installation, encrypted credentials, recovery and how releases are cut. ComfyUI remains a separately installed or remote service.

For macOS title-bar changes, also run npm run electron:smoke -- --production --native-input after building. This uses cliclick (installed separately) with macOS Accessibility permission to test real mouse hover, clicks, and window dragging; browser automation alone bypasses the native draggable-region hit testing. It brings the test window to the front and moves the mouse, so let it finish before interacting with the desktop.

Environment Variables

Create a .env.local file in the root directory:

GEMINI_API_KEY=your_gemini_api_key          # Required for prompt-to-workflow
OPENAI_API_KEY=your_openai_api_key          # Optional
ANTHROPIC_API_KEY=your_anthropic_api_key    # Optional
REPLICATE_API_KEY=your_replicate_api_key    # Optional
FAL_API_KEY=your_fal_api_key                # Optional
KIE_API_KEY=your_kie_api_key                # Optional
WAVESPEED_API_KEY=your_wavespeed_api_key    # Optional
COMFY_API_KEY=your_comfy_api_key            # Optional, ComfyUI-hosted models via Comfy Router

API keys can also be entered in the app (Settings → Providers), which is the usual way — the environment variables are for headless or shared deployments.

Running ComfyUI workflows

Drop any ComfyUI workflow onto the canvas and it becomes a node. Shift + C adds an empty ComfyUI node and opens the same dialog to pick a workflow for it. If the workflow was set up as an app in ComfyUI — using App Mode to pick its inputs and outputs — those selections become the node's handles and settings directly; otherwise Node Banana detects them and asks you to confirm. The Blueprints tab lists the ready-made pipelines your ComfyUI already ships, so there is nothing to upload at all.

Choose where they run in Settings → ComfyUI:

  • Comfy Cloud (default) — no GPU or install needed; add an API key from platform.comfy.org.
  • This computer — your own ComfyUI at http://127.0.0.1:8188. It needs the models and custom nodes the workflow uses.
  • Remote — a ComfyUI elsewhere on your network.

API keys can also be configured in Project Settings within the app.

Build

npm run build
npm run start

Example Workflows

The /examples directory contains example workflow files. To try them:

  1. Start the dev server with npm run dev
  2. Drag any .json file from the /examples folder into the browser window
  3. Review the prompts in each node before running — they're targeted to specific use cases

Node Types

TypePurpose
Image InputLoad or upload reference images
Audio InputLoad or upload audio files
PromptText prompt input
Prompt ConstructorBuild dynamic prompts with variables and LLM-powered text construction
ArrayBatch process multiple inputs through a workflow
GenerateAI image generation (multi-provider)
Generate VideoAI video generation
Generate AudioText-to-speech and AI audio generation
Generate 3DAI 3D model generation
LLMAI text generation (Gemini, OpenAI, Anthropic)
AnnotationDraw on images with full-screen editor
Split GridSplit image into grid cells
Video StitchCombine video clips into a single output
Video TrimTrim video clips to a specific range
Video Frame GrabExtract frames from video
Image CompareSide-by-side image comparison
Ease CurveDefine easing curves for parameter interpolation
RouterRoute data to different branches
SwitchToggle between execution paths
Conditional SwitchRoute data based on conditions
GLB ViewerLoad and display 3D GLB models
OutputDisplay final result
Output GalleryDisplay multiple results in a gallery

Tech Stack

Next.js TypeScript React Flow Konva.js Zustand TailwindCSS

Testing

npm test              # Watch mode
npm run test:run      # Single run
npm run test:coverage # With coverage report
npm run electron:test # The desktop shell's own tests
npm run lint          # ESLint (Next.js rules)
npm run typecheck     # Type-check the app without its tests

Contributing

PRs are welcome! Fork the repo, branch from develop, and open a PR back to develop.

This is primarily built for my own workflows — if a PR conflicts with my plans I'll politely decline. For larger contributions, join the Discord to coordinate first.

Community

License

MIT

shrimbly/node-banana

Free and open node based generative workflows.

TypeScript

1,616

2,344 commits

updated Oct 12, 2026

See the code

README

Node Banana

An Open Visual Workflow Editor for AI APIs

GitHub stars License Discord


Build AI image, 3D, audio and video generation pipelines by connecting nodes on a visual canvas.
Multi-provider support. Dynamic prompting features. Local, private, MIT, BYOK.


Download for Mac · Apple Silicon  •  Download for Windows · x64

Website  •  Documentation  •  Discord  •  All releases


Build Complex AI Pipelines Visually

Node Banana is a node-based workflow editor for AI media generation. Drag nodes onto an infinite canvas, connect them with typed handles, and execute pipelines that call AI APIs in dependency order.

  • Build dynamic prompts with variables, LLM/VLM-powered prompt construction, and reusable prompt chains
  • Generate workflows from natural language or choose from preset templates
  • Chain multiple AI models together across providers in a single pipeline
  • Generate images, video, 3D models, and audio from a single workflow
  • Annotate and edit images with a full-screen drawing editor
  • Save and share workflows as portable JSON files

Features

FeatureDescription
Desktop appA signed Mac app (Apple Silicon) and a Windows installer (x64) that update themselves. Keys are encrypted at rest; workflows and media stay on your disk
AgentA chat window that builds workflows, edits the canvas and changes node settings, running on your own Claude Code or Codex (ChatGPT) subscription through the vendor's CLI, never on API credits
Asset libraryEverything you generate is saved as it is made and browsable in the Assets view, with filters, favourites, tags, and the workflow that made it
Dynamic PromptingBuild prompts with variables, LLM-powered text construction, and reusable prompt chains that adapt per run and per input
Prompt to WorkflowGenerate complete workflows from natural language descriptions
Visual Node EditorDrag-and-drop nodes onto an infinite canvas with pan and zoom
Image GenerationGenerate images using Google Gemini, Replicate, fal.ai, Kie.ai, and more
Video GenerationGenerate video via AI API providers
Audio GenerationText-to-speech and AI audio generation
3D GenerationGenerate 3D models or use them as node inputs
Image AnnotationFull-screen editor with drawing tools (rectangles, circles, arrows, freehand, text)
Text GenerationGenerate text using Google Gemini, OpenAI, or Anthropic models
Workflow ChainingConnect multiple nodes to create complex multi-step pipelines
Group LockingLock node groups to skip them during execution
Batch runsRun a workflow or a group N times, with each output tagged by its run
Save/LoadCmd/Ctrl+S saves, autosave follows your edits, and workflows are portable JSON files

Supported Providers

ProviderStatus
Google GeminiFully supported
ReplicateSupported
fal.aiSupported
Kie.aiSupported
WaveSpeedSupported
ComfyUI (Comfy Router: Flux, GPT Image, Nano Banana, Seedream, Kling, Veo, Runway, LTX and more)Supported
OpenAILLM only

Getting Started

Install the desktop app

Download the installer for your platform from nodebanana.app: Mac (Apple Silicon, macOS 13 or later) as a signed and notarised DMG, or Windows (x64, Windows 10 or later) as an installer. The Windows build is not code-signed, so SmartScreen may warn on first run. The app keeps itself up to date from GitHub Releases; every release also lists SHA-256 checksums for its installers.

Then open Settings → Providers and paste the API keys for the providers you use. Node Banana calls those providers directly with your keys, and their usage is billed to you by them. Keys are stored encrypted in your OS profile; workflows and generated media are files in the Node Banana folder (Documents by default). See the desktop guide for data locations, logs, recovery and updates.

Run from source

Prerequisites

  • Node.js 18+
  • npm

Quick Start

git clone https://github.com/shrimbly/node-banana.git
cd node-banana
npm install
npm run dev

Open http://localhost:3000 in your browser.

npm run dev and npm start (after npm run build) listen on 127.0.0.1 only, and the API answers Node Banana's own page, not other websites. To reach the app from another device, set HOST=0.0.0.0 (for example HOST=0.0.0.0 npm start). Do that only on a trusted network or behind an authenticated proxy: the API reads and writes local workflow files and spends the provider keys in .env.local.

Local Electron app

Use Node.js 22.12 or newer for the Electron tooling. After npm install, launch the desktop development app:

npm run electron:dev

This opens Node Banana in an Electron window and starts its own local Next.js server. UI edits reload automatically. Restart the command after changing files in electron/. No separate npm run dev process is needed.

To run a production build locally:

npm run build
npm run electron:start

When running from source, the app reads the same .env.local as the browser version, and API keys can also be entered in Settings. Desktop settings use a separate persistent Electron profile; existing browser settings are not imported automatically. Workflows remain ordinary files that either version can open. Folder selection uses a native desktop dialog.

The desktop server binds to 127.0.0.1:47831 and only accepts authenticated requests from the Electron session. Set NODE_BANANA_ELECTRON_PORT to override the port if it is occupied. Keep that port consistent: browser storage is tied to the origin. NODE_BANANA_ELECTRON_USER_DATA can point to an alternate absolute profile directory. Electron development output lives in .next-electron, so the browser dev server can run separately.

Run npm run electron:smoke to check the real desktop window, editor interaction, local file save/load, native dialog bridge, settings persistence, and server shutdown using a temporary profile. It needs a graphical desktop (or Xvfb on Linux). Add -- --production to test an existing production build. These commands run from source. Use npm run electron:package for an unsigned Apple Silicon app, DMG and ZIP (--sign signs and notarises it; on Windows it makes the installer), and npm run electron:acceptance for packaged crash/recovery checks. See the desktop guide for installation, encrypted credentials, recovery and how releases are cut. ComfyUI remains a separately installed or remote service.

For macOS title-bar changes, also run npm run electron:smoke -- --production --native-input after building. This uses cliclick (installed separately) with macOS Accessibility permission to test real mouse hover, clicks, and window dragging; browser automation alone bypasses the native draggable-region hit testing. It brings the test window to the front and moves the mouse, so let it finish before interacting with the desktop.

Environment Variables

Create a .env.local file in the root directory:

GEMINI_API_KEY=your_gemini_api_key          # Required for prompt-to-workflow
OPENAI_API_KEY=your_openai_api_key          # Optional
ANTHROPIC_API_KEY=your_anthropic_api_key    # Optional
REPLICATE_API_KEY=your_replicate_api_key    # Optional
FAL_API_KEY=your_fal_api_key                # Optional
KIE_API_KEY=your_kie_api_key                # Optional
WAVESPEED_API_KEY=your_wavespeed_api_key    # Optional
COMFY_API_KEY=your_comfy_api_key            # Optional, ComfyUI-hosted models via Comfy Router

API keys can also be entered in the app (Settings → Providers), which is the usual way — the environment variables are for headless or shared deployments.

Running ComfyUI workflows

Drop any ComfyUI workflow onto the canvas and it becomes a node. Shift + C adds an empty ComfyUI node and opens the same dialog to pick a workflow for it. If the workflow was set up as an app in ComfyUI — using App Mode to pick its inputs and outputs — those selections become the node's handles and settings directly; otherwise Node Banana detects them and asks you to confirm. The Blueprints tab lists the ready-made pipelines your ComfyUI already ships, so there is nothing to upload at all.

Choose where they run in Settings → ComfyUI:

  • Comfy Cloud (default) — no GPU or install needed; add an API key from platform.comfy.org.
  • This computer — your own ComfyUI at http://127.0.0.1:8188. It needs the models and custom nodes the workflow uses.
  • Remote — a ComfyUI elsewhere on your network.

API keys can also be configured in Project Settings within the app.

Build

npm run build
npm run start

Example Workflows

The /examples directory contains example workflow files. To try them:

  1. Start the dev server with npm run dev
  2. Drag any .json file from the /examples folder into the browser window
  3. Review the prompts in each node before running — they're targeted to specific use cases

Node Types

TypePurpose
Image InputLoad or upload reference images
Audio InputLoad or upload audio files
PromptText prompt input
Prompt ConstructorBuild dynamic prompts with variables and LLM-powered text construction
ArrayBatch process multiple inputs through a workflow
GenerateAI image generation (multi-provider)
Generate VideoAI video generation
Generate AudioText-to-speech and AI audio generation
Generate 3DAI 3D model generation
LLMAI text generation (Gemini, OpenAI, Anthropic)
AnnotationDraw on images with full-screen editor
Split GridSplit image into grid cells
Video StitchCombine video clips into a single output
Video TrimTrim video clips to a specific range
Video Frame GrabExtract frames from video
Image CompareSide-by-side image comparison
Ease CurveDefine easing curves for parameter interpolation
RouterRoute data to different branches
SwitchToggle between execution paths
Conditional SwitchRoute data based on conditions
GLB ViewerLoad and display 3D GLB models
OutputDisplay final result
Output GalleryDisplay multiple results in a gallery

Tech Stack

Next.js TypeScript React Flow Konva.js Zustand TailwindCSS

Testing

npm test              # Watch mode
npm run test:run      # Single run
npm run test:coverage # With coverage report
npm run electron:test # The desktop shell's own tests
npm run lint          # ESLint (Next.js rules)
npm run typecheck     # Type-check the app without its tests

Contributing

PRs are welcome! Fork the repo, branch from develop, and open a PR back to develop.

This is primarily built for my own workflows — if a PR conflicts with my plans I'll politely decline. For larger contributions, join the Discord to coordinate first.

Community

License

MIT

Significant stargazers

艾梦

163 followers · starred Apr 2026

Raúl Kripalani

740 followers · starred Mar 2026

Jeffrey Guenther

72 followers · starred Mar 2026

Michael Barrett

82 followers · starred Jan 2026