Skip to content
Back to skills

Api Models

ASecurity

Call nodetool.models from a code action: pick the best configured model for a capability, search for a model the user named, browse a provider's catalog, set a node's model property, or make one language-model call. Load before the first call into nodetool.models.

  • 552 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentsgonodeapi

Works with

  • api

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add nodetool-ai/nodetool --skill api-models --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Api Models?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Api Models
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nodetool-ai-api-models/badge)](https://www.skillsdirectory.com/skills/nodetool-ai-api-models)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: api-models
description: "Call nodetool.models from a code action: pick the best configured model for a capability, search for a model the user named, browse a provider's catalog, set a node's model property, or make one language-model call. Load before the first call into nodetool.models."
---

# nodetool.models

Model discovery for this install. It knows which providers have credentials
and which local models are downloaded. Never guess a model id: pick one here,
then pass it on. Credentials and provider setup are
`nodetool-model-provider-config`.

## Calls

| Call | Does | Answers |
| :--- | :--- | :--- |
| `pick(capability, {query, provider_hint, model_hint, prefer_local})` | Resolves ONE model. | The top result: `{provider, model_id, ref, …}` |
| `find(capability, {query, task, provider_hint, model_hint, prefer_local, limit})` | Ranks candidates. `limit` defaults to 5. | `{results, ref, note?, query_matched?}` |
| `list({provider, model_type, downloaded_only, limit})` | Browses every configured model. | `{results}` |
| `forProvider(provider)` | Lists one provider's language models. | The provider catalog |
| `generate(prompt, model, {system, images, max_tokens, temperature})` | One language-model call, with optional images. No asset is made. | `{provider, model, text}` |

`capability` is one of `text_to_image`, `image_to_image`, `segment_image`,
`text_to_video`, `image_to_video`, `reference_to_video`, `text_to_speech`,
`text_to_music`, `audio_to_audio`, `automatic_speech_recognition`,
`generate_embedding` and `generate_message`.

`model_type` for `list` is one of `language`, `image`, `video`, `tts`,
`music`, `audio_to_audio`, `asr` and `embedding`.

## What a result carries

- `provider` and `model_id` — the route. Every `nodetool.media.*` call takes
  the whole result, `{provider, model_id}`, or a `"provider/model_id"` string.
- `ref` — the typed value `{type, provider, id, name}`. Assign it **verbatim**
  to a node's `*_model` property. The flat `model_id` field does not fit that
  property.
- For ranked media models: `canonical`, `ranked_task`, `rank` and `of`, and
  `alternate_routes` for other providers that serve the same model. One model
  is one row, not one row for each route.
- `prompting_skill` — the name of the shipped guide for that model line. Load
  it with `load_skill` before you write the prompt.

## Rules

- `pick` with no options is the good default. For image, video, speech and
  music, the order comes from a quality leaderboard for the task. Do not shop
  around.
- When the user named a model, search in the same call:
  `pick("text_to_image", {query: "flux schnell"})`. `query` is free text over
  the model id and name. All words must appear, and separators do not matter.
- `pick` throws when no configured provider offers the capability, and when a
  `query` matches nothing. It never answers with an unrelated model. Report
  the miss or call `find` to see what is configured.
- `task` is a hint against the supported tasks of a model. It is not a search
  box. Use `query` to search by name.
- A judge for `nodetool.media.critique`, `compare`, `scoreAdherence` and
  `understandVideo` is a chat model that reads images or video:
  `pick("generate_message", {query: "gemini"})`, for example. It is not the
  model that made the picture.

## Examples

```js
// The best image model, straight into a generation.
const model = await nodetool.models.pick("text_to_image");
const shot = await nodetool.media.generateImage("a red fox in snow", model);

// A node property wants the typed ref.
const tts = await nodetool.models.pick("text_to_speech");
wf.node("speech_1").set({ model: tts.ref });

// One text call with an image.
const llm = await nodetool.models.pick("generate_message");
const { text } = await nodetool.models.generate(
  "Name the dominant colour in one word.", llm, { images: [shot.asset_uri] }
);
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.