{"id":23518443,"url":"https://github.com/nodetool-ai/nodetool","last_synced_at":"2026-05-29T14:00:47.358Z","repository":{"id":238250439,"uuid":"777230015","full_name":"nodetool-ai/nodetool","owner":"nodetool-ai","description":"The open creative AI workspace","archived":false,"fork":false,"pushed_at":"2026-05-24T06:00:29.000Z","size":393382,"stargazers_count":359,"open_issues_count":26,"forks_count":46,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-05-24T06:36:20.769Z","etag":null,"topics":["agents","ai","anthropic","automation","comfyui","flux","gemma3","gpt-oss","huggingface","llamacpp","llm","local-first","mlx","ollama","openai","qwen-image","qwen3","stable-diffusion"],"latest_commit_sha":null,"homepage":"https://nodetool.ai/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nodetool-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security-hardening.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-03-25T13:09:15.000Z","updated_at":"2026-05-24T05:34:10.000Z","dependencies_parsed_at":"2024-05-28T01:48:42.915Z","dependency_job_id":"c3c60351-ea8f-4a4e-9e7c-545e1c6669af","html_url":"https://github.com/nodetool-ai/nodetool","commit_stats":null,"previous_names":["nodetool-ai/nodetool"],"tags_count":181,"template":false,"template_full_name":null,"purl":"pkg:github/nodetool-ai/nodetool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodetool-ai%2Fnodetool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodetool-ai%2Fnodetool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodetool-ai%2Fnodetool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodetool-ai%2Fnodetool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nodetool-ai","download_url":"https://codeload.github.com/nodetool-ai/nodetool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodetool-ai%2Fnodetool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33655441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai","anthropic","automation","comfyui","flux","gemma3","gpt-oss","huggingface","llamacpp","llm","local-first","mlx","ollama","openai","qwen-image","qwen3","stable-diffusion"],"created_at":"2024-12-25T16:01:11.916Z","updated_at":"2026-05-29T14:00:47.352Z","avatar_url":"https://github.com/nodetool-ai.png","language":"TypeScript","funding_links":[],"categories":["👑Stable Diffusion","LLM \u0026 Inference","NLP"],"sub_categories":["Python"],"readme":"# NodeTool\n\n**The open creative AI workspace.**\n\n*Every model. Your keys. Your canvas.*\n\n[![Stars](https://img.shields.io/github/stars/nodetool-ai/nodetool?style=social)](https://github.com/nodetool-ai/nodetool/stargazers)\n[![Downloads](https://img.shields.io/github/downloads/nodetool-ai/nodetool/total?color=3fb950)](https://github.com/nodetool-ai/nodetool/releases)\n[![Latest Release](https://img.shields.io/github/v/release/nodetool-ai/nodetool?display_name=tag\u0026sort=semver)](https://github.com/nodetool-ai/nodetool/releases/latest)\n[![Discord](https://img.shields.io/badge/Discord-join-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/WmQTWZRcYE)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE.txt)\n\n[![Platform: macOS](https://img.shields.io/badge/platform-macOS-lightgrey)](https://nodetool.ai)\n[![Platform: Windows](https://img.shields.io/badge/platform-Windows-blue)](https://nodetool.ai)\n[![Platform: Linux](https://img.shields.io/badge/platform-Linux-orange)](https://nodetool.ai)\n\nNodeTool is the open-source creative AI workspace — every major model from every major provider, called with your own keys, wired into one node-based canvas you run on your machine.\n\nBring your own keys to FAL, KIE, Atlas, OpenAI, Anthropic, Gemini, Replicate, ElevenLabs, HuggingFace. Pay providers directly at provider prices. Switch the moment a better model ships. Wire it all into one canvas with the editing tools you rely on — masks, inpaint, outpaint, relight, upscale, layers, compositing.\n\n![NodeTool Interface](screen_canvas.png)\n\n## Two ways to run it\n\nSame code, same workflows, same nodes. Pick whichever fits how you want to work — workflows are portable between both, and there is no separate \"pro\" or closed-source version.\n\n- **NodeTool Studio** — desktop app for macOS, Windows, and Linux. Runs Ollama, MLX, and GGUF models on your machine. Works offline.\n- **NodeTool Cloud** — open in any browser. No install, no GPU. BYOK to every provider.\n\nBoth are AGPL-3.0, both built from this repository.\n\n|   | **NodeTool Studio** (desktop) | **NodeTool Cloud** (hosted) |\n| :--- | :--- | :--- |\n| **Where it runs** | Your machine | Managed servers, in any browser |\n| **Install** | Desktop app + ~20GB for local models | None — sign in and start |\n| **Local models** (Ollama, MLX, GGUF) | ✅ Yes — runs on your hardware | ❌ Not available — cloud APIs only |\n| **BYOK cloud providers** | ✅ All providers (keys stored on disk) | ✅ All providers (keys encrypted at rest) |\n| **Works offline** | ✅ Yes, fully offline with local models | ❌ Needs an internet connection |\n| **Where your data lives** | On your disk only | Managed storage (encrypted) |\n| **GPU required** | Recommended for local models | None |\n| **Updates** | You install new releases | Always on the latest version |\n| **Cost** | Free; pay only the providers you call | Subscription + your own API spend (BYOK) |\n| **Source code** | AGPL-3.0 (this repo) | AGPL-3.0 (this repo) — self-host any time |\n\n**Pick Studio if** you want to run open-weight models for free, work offline, keep data on your disk, or have a capable GPU / Apple Silicon machine.\n\n**Pick Cloud if** you want zero setup, work across multiple devices, or don't want to manage local model files and GPU drivers.\n\n## Why NodeTool\n\nThe best model for the job changes every month. NodeTool keeps up.\n\n\u003e Seedance is the best video model right now. It's available on FAL, Replicate, and KIE at different price points. NodeTool lets you pick the cheapest. When Veo 4 ships, you swap one node and you're on it the same day.\n\nThat's what vendor neutrality buys you:\n\n- **Every model.** OpenAI, Anthropic, Gemini, FAL, KIE, Replicate, ElevenLabs, HuggingFace. Local with Ollama, MLX, and GGUF.\n- **Your keys.** Pay providers directly at provider prices. No credit markup, no proprietary tokens.\n- **Your canvas.** Workflows, files, and keys belong to you. Run on your machine or in the browser — your choice.\n- **Open source.** AGPL-3.0. Self-host any time. No acquisition risk.\n\n## What's in the box\n\n| | |\n| :--- | :--- |\n| **Node-based canvas** | Drag-and-drop nodes with type-safe connections |\n| **Image, video, audio, text** | Unified workflows across every modality |\n| **Editing tools as nodes** | Mask, inpaint, outpaint, relight, upscale, layers, compositing |\n| **Runs on your machine** | Ollama, MLX (Apple Silicon), and GGUF for local inference |\n| **BYOK everywhere** | OpenAI, Anthropic, Gemini, FAL, KIE, Replicate, ElevenLabs, HuggingFace |\n| **Document search** | Built-in vector store for indexing and querying your files |\n| **Real-time previews** | Live output at every node as the workflow runs |\n| **Custom nodes** | Extend in TypeScript or Python |\n| **Deploy anywhere** | Docker, RunPod, Google Cloud Run, or self-hosted |\n| **Cross-platform** | Desktop, web, CLI, and mobile |\n\n## What people build with it\n\nThe workspace is a canvas, not a wizard. A few of the patterns we see most often:\n\n- **Image generation and editing** — FLUX.2, Nano Banana Pro, GPT-Image 3, plus mask, inpaint, outpaint, relight, and upscale as first-class nodes.\n- **Video** — Seedance, Sora 2 Pro, Veo 3.1, Wan 2.6, Hailuo 2.3, Kling 2.6. Text-to-video, image-to-video, and video-to-video pipelines.\n- **Voice and audio** — Whisper for transcription, ElevenLabs and OpenAI TTS for speech, audio analysis and editing as nodes.\n- **Document search** — point a workflow at a folder, embed it, query it. RAG without writing the plumbing.\n- **Multi-step agents** — agents are a capability inside the workspace, not a separate product. Wire one into a graph when a step needs to plan, decide, or call tools.\n- **Mini-apps** — share a workflow as an interactive web app others can run.\n\n## Models\n\nPick a provider per node. Switch by changing one field.\n\n| Type | Models |\n| :--- | :--- |\n| **Video** | Seedance, OpenAI Sora 2 Pro, Google Veo 3.1, xAI Grok Imagine, Alibaba Wan 2.6, MiniMax Hailuo 2.3, Kling 2.6 |\n| **Image** | Flux, Black Forest Labs FLUX.2, Google Nano Banana Pro, GPT-Image 3 |\n| **Audio** | OpenAI Whisper, OpenAI TTS, ElevenLabs |\n| **Text** | GPT-4, Claude, Gemini, Llama, Mistral — local on your machine, or BYOK to the cloud |\n\nUse `TextToVideo`, `ImageToVideo`, or `TextToImage` nodes and select your provider and model. Some models route through [kie.ai](https://kie.ai/), which combines providers and is often the cheapest path.\n\n## How NodeTool compares\n\n| | NodeTool | ComfyUI | Weavy | n8n |\n| :--- | :--- | :--- | :--- | :--- |\n| **Built for** | Creatives working with AI | Stable Diffusion power users | Creative teams (now part of Figma) | Business workflows |\n| **Modalities** | Image, video, audio, text | Image, video | Image, video | Text |\n| **Models** | Every major provider, BYOK | Stable Diffusion | Curated marketplace | API integrations |\n| **Source \u0026 pricing** | AGPL-3.0, provider prices | Open source, free | Closed, credits | Fair-code, subscription |\n\n**vs ComfyUI.** ComfyUI exposes every parameter for engineers who want them. NodeTool keeps the node-based power, gives it an interface that doesn't fight you, and covers the rest of the stack — video, audio, text, document search.\n\n**vs Weavy.** Weavy was the closed-source canvas for creative AI. After the Figma acquisition, the roadmap belongs to someone else. NodeTool is the open alternative — same node-based canvas, your keys, your files, no acquisition risk.\n\n**vs n8n.** n8n is for business workflows and API plumbing. NodeTool is built for creative work — models, masks, layers, video, audio, RAG.\n\n## Get NodeTool\n\n### NodeTool Studio (desktop)\n\n| Platform | Get It | Requirements |\n| :--- | :--- | :--- |\n| **Windows** | [Download](https://nodetool.ai/studio) | NVIDIA GPU recommended, 4GB+ VRAM (local models), 20GB space |\n| **macOS** | [Download](https://nodetool.ai/studio) | M1+ Apple Silicon, 16GB+ RAM (local models) |\n| **Linux** | [Download](https://nodetool.ai/studio) | NVIDIA GPU recommended, 4GB+ VRAM (local models) |\n\n[Flatpak CI Builds](https://github.com/nodetool-ai/nodetool/actions/workflows/flatpak-ci.yml) are available for Linux.\n\n### NodeTool Cloud (browser)\n\nOpen [nodetool.ai/cloud](https://nodetool.ai/cloud) and sign in. Bring your own keys for every provider.\n\n______________________________________________________________________\n\n## Documentation\n\n- **[Getting Started](https://docs.nodetool.ai/getting-started)** — Build your first workflow\n- **[Node Packs](https://docs.nodetool.ai/packs)** — Available nodes and integrations\n- **[Custom Nodes](https://docs.nodetool.ai/developer/custom-nodes-guide)** — Extend NodeTool\n- **[Deployment](https://docs.nodetool.ai/deployment)** — Share your work\n- **[API Reference](https://docs.nodetool.ai/api)** — Programmatic access\n\n______________________________________________________________________\n\n## CLI \u0026 Server (npm)\n\nRun the server, execute workflows, or chat from the terminal:\n\n```bash\n# Install globally (Node.js 22.x required)\nnpm install -g @nodetool-ai/cli\n\n# Start the API server (port 7777)\nnodetool serve\n\n# Interactive chat with agent mode\nnodetool-chat --agent --provider anthropic --model claude-sonnet-4-6\n\n# Run a TypeScript DSL workflow\nnodetool workflows run my-workflow.ts\n\n# One-off without global install\nnpx --package=@nodetool-ai/cli nodetool serve\nnpx --package=@nodetool-ai/cli nodetool-chat --agent\n```\n\nSee the [CLI Reference](https://docs.nodetool.ai/cli) for all commands.\n\n______________________________________________________________________\n\n## Architecture\n\nNodeTool is a monorepo with a TypeScript backend, React frontend, Electron desktop shell, and React Native mobile app.\n\n```\nnodetool/\n├── packages/          # Backend monorepo (28 packages)\n│   ├── kernel/        #   Workflow graph \u0026 runner\n│   ├── node-sdk/      #   BaseNode class \u0026 node registry\n│   ├── base-nodes/    #   100+ built-in node types\n│   ├── agents/        #   Agent system with task planning \u0026 tools\n│   ├── runtime/       #   Processing context \u0026 model providers\n│   ├── websocket/     #   HTTP + WebSocket server (entry point)\n│   ├── vectorstore/   #   SQLite-vec vector database\n│   ├── code-runners/  #   Sandboxed code execution\n│   └── ...            #   Protocol, config, auth, storage, deploy, etc.\n├── web/               # React frontend (Vite + MUI + React Flow)\n├── electron/          # Electron desktop app\n├── mobile/            # React Native mobile app (Expo)\n└── docs/              # Jekyll documentation site\n```\n\nFor a detailed architecture overview, see [ARCHITECTURE.md](ARCHITECTURE.md).\n\n______________________________________________________________________\n\n## Development Setup\n\n**Prerequisites:** Node.js 22.22.1, npm. Python 3.11 with conda for Python nodes (optional).\n\n\u003e **Node 22.22.1 is required.** Matches Electron 39's embedded Node so dev and the packaged app run on the same Node version. Use `nvm use` to activate (reads `.nvmrc`).\n\n### Quick Start\n\n```bash\nnvm use                    # Activate Node 22.22.1 (reads .nvmrc)\nnpm install\nnpm run build:packages     # Build all TS packages in dependency order\n\n# Run backend (port 7777) and frontend (port 3000)\n# Uses tsx --watch for the backend, so startup skips a full websocket package rebuild.\nnpm run dev\n```\n\n### Python Nodes (optional)\n\nPython nodes (HuggingFace, MLX, Apple integrations) run via the `PythonStdioBridge`, which spawns a Python worker process that communicates over stdin/stdout. The bridge connects lazily on the first workflow that uses Python nodes — no separate setup is needed for the TypeScript backend.\n\n### Electron App\n\n```bash\nnpm run electron\n```\n\nThe Electron app auto-detects your active Conda environment. Settings are stored in:\n- **Linux/macOS**: `~/.config/nodetool/settings.yaml`\n- **Windows**: `%APPDATA%\\nodetool\\settings.yaml`\n\n\u003e **Native module ABI caveat.** Electron 39 bundles its own Node.js (22.22.1) but uses a distinct `NODE_MODULE_VERSION` (140), so native modules like `better-sqlite3` must be compiled against Electron's headers — *not* system Node, even when the major matches. This is handled automatically by `@electron/rebuild`, wired into `electron/`'s `postinstall`. If you ever see a `NODE_MODULE_VERSION` mismatch, force a rebuild:\n\u003e\n\u003e ```bash\n\u003e npm --prefix electron run postinstall\n\u003e ```\n\u003e\n\u003e **Do not** use plain `npm rebuild` — it compiles against system Node's ABI, which will not match Electron's runtime.\n\n### Mobile App\n\n```bash\ncd mobile \u0026\u0026 npm install \u0026\u0026 npm start\n```\n\nSee [mobile/README.md](mobile/README.md) for full setup.\n\n### Make Commands\n\n| Command | Description |\n| :--- | :--- |\n| `npm install` | Install all dependencies |\n| `npm run build` | Build all packages + web |\n| `npm run dev` | Start backend (`tsx --watch`) + web dev server |\n| `npm run electron` | Build and start Electron app |\n| `npm run check` | Run typecheck + lint + test |\n| `npm run test` | Run all tests |\n\n______________________________________________________________________\n\n## Testing\n\n```bash\n# Unit tests\ncd electron \u0026\u0026 npm test \u0026\u0026 npm run lint\ncd web \u0026\u0026 npm test \u0026\u0026 npm run lint\n\n# Web E2E (needs backend on port 7777)\ncd web \u0026\u0026 npx playwright install chromium \u0026\u0026 npm run test:e2e\n\n# Electron E2E (requires xvfb on Linux headless)\ncd electron \u0026\u0026 npm run vite:build \u0026\u0026 npx tsc\ncd electron \u0026\u0026 npx playwright install chromium \u0026\u0026 npm run test:e2e\n```\n\nFor detailed testing documentation, see [web/TESTING.md](web/TESTING.md).\n\n______________________________________________________________________\n\n## Contributing\n\nWe welcome bug reports, feature requests, code contributions, and new nodes.\n\nPlease open an issue before starting major work so we can coordinate.\n\n### Acknowledgements\n\n- [@mphermes](https://github.com/mphermes) — Atlas Cloud integration\n\n## License\n\n[AGPL-3.0](https://github.com/nodetool-ai/nodetool/blob/main/LICENSE)\n\n## Get in Touch\n\n- **General**: [hello@nodetool.ai](mailto:hello@nodetool.ai)\n- **Team**: [matti@nodetool.ai](mailto:matti@nodetool.ai), [david@nodetool.ai](mailto:david@nodetool.ai)\n\n[GitHub](https://github.com/nodetool-ai/nodetool) | [Discord](https://discord.gg/WmQTWZRcYE) | [Website](https://nodetool.ai)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=nodetool-ai/nodetool\u0026type=date\u0026legend=top-left)](https://www.star-history.com/#nodetool-ai/nodetool\u0026type=date\u0026legend=top-left)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodetool-ai%2Fnodetool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnodetool-ai%2Fnodetool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodetool-ai%2Fnodetool/lists"}