One runbook per provider for adding new models and nodes. Each guide names the exact files, the command to run, a copy-pasteable snippet, and how the same change looked in past PRs.

Audience: coding agents and contributors keeping NodeTool current — a new image model shipped, a new endpoint went live, a new provider needs wiring. Start with the provider you’re updating; each guide is self-contained.

NodeTool spans many providers but only a few distinct mechanisms. Find your provider’s mechanism first — it tells you whether a new model needs zero code, a manifest entry, or a codegen run.

How adding a model works, by mechanism

Mechanism What “add a model” means Providers
Dynamic fetch Nothing — models appear from the provider’s live /models (or local daemon) endpoint. Code only for capability/cost overrides. OpenAI (chat), Anthropic, Gemini (text), xAI, OpenAI-compatible (Groq, Mistral, DeepSeek, Moonshot, Cerebras, Alibaba Cloud, OpenRouter, Requesty), Ollama, Local inference (LM Studio, llama.cpp, vLLM, in-process llama.cpp)
Static model list A code edit to a hardcoded array in the provider (plus cost entry). OpenAI (image), Gemini (image, Veo, Omni, Lyria, TTS, ASR, embeddings)
Codegen from upstream schemas Add an endpoint id to a config, run the generator — the manifest is regenerated, never hand-edited. FAL, Replicate, KIE
Manifest Add a JSON entry to the package manifest. AtlasCloud adds a sync script for fields and Together generates its manifest from a script. AtlasCloud, Topaz, Together
Static node package Add a model id to the provider/base arrays, or a new BaseNode subclass. MiniMax, Reve, ElevenLabs, HuggingFace

All guides

  • OpenAI — chat models auto-fetch; image models (gpt-image-*) are a static list.
  • Anthropic (Claude) — models fetched live from the Anthropic API.
  • Google Gemini — text auto-fetches; image, Veo, Omni, and Lyria models are static lists.
  • xAI (Grok) — a static catalog plus chat, image, and video rows classified from /v1/models.
  • OpenAI-compatible providers — Groq, Mistral, DeepSeek, Moonshot, Cerebras, Alibaba Cloud, Cohere, OpenRouter, Requesty, Opper, API Route, and how to add a new one.
  • FAL — nodes generated from FAL OpenAPI schemas via codegen.
  • Replicate — nodes generated from Replicate model schemas via codegen.
  • KIE — configs and manifest generated from KIE’s published API docs.
  • AtlasCloud — hand-maintained manifest drives nodes and the model picker.
  • Topaz — manifest-driven image/video enhancement nodes.
  • Together AI — generated image/video manifest plus live-fetched chat models.
  • MiniMax — chat, image, video, and audio via provider arrays and a node pack.
  • Reve — image create/edit/remix nodes.
  • ElevenLabs — TTS models and voices as static arrays (decorator package).
  • HuggingFace — Hub-backed model discovery plus a hand-written node pack.
  • Ollama — local models discovered from the running daemon (ollama pull).
  • Local inference — LM Studio, llama.cpp, and vLLM over OpenAI-compatible localhost, plus in-process llama.cpp.

Before you open a PR

Whatever the mechanism, run these from the repo root:

npm run test:affected
npm run typecheck
npm run lint
npm run dev:nodetool -- harness gate --base origin/main

For decorator/codegen packages (FAL, Replicate, KIE, ElevenLabs, and other dist/-loaded packs), run npm run build:packages after regenerating so the runtime picks up the change. Each guide lists its exact verify commands. npm run check is the full aggregate and runs only when explicitly needed.

Contributions are welcome — open a PR on GitHub or say hi on Discord.