test-model

Test any model (text, image, video, audio) locally and via enter integration tests

4,286 stars

Best use case

test-model is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Test any model (text, image, video, audio) locally and via enter integration tests

Teams using test-model should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/test-model/SKILL.md --create-dirs "https://raw.githubusercontent.com/pollinations/pollinations/main/.claude/skills/test-model/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/test-model/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How test-model Compares

Feature / Agenttest-modelStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Test any model (text, image, video, audio) locally and via enter integration tests

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Testing Any Model Locally

## Services Overview

| Service | Port | Models |
|---------|------|--------|
| `image.pollinations.ai` | 16384 | Image + Video models |
| `text.pollinations.ai` | 16385 | Text/LLM models |
| `enter.pollinations.ai` | 3000 | Gateway (routes to above + handles audio) |

## 1. Start services

```bash
# Image/Video models — start image service
cd image.pollinations.ai && npm run dev &

# Text models — start text service
cd text.pollinations.ai && npm run dev &

# Enter gateway (needed for audio, or to test full flow)
cd enter.pollinations.ai && npm run decrypt-vars && npm run dev &
```

## 2. Get tokens

```bash
# For direct image/text service calls
TOKEN=$(grep PLN_ENTER_TOKEN image.pollinations.ai/.env | cut -d= -f2)

# For enter gateway calls (use test API key)
API_KEY=$(grep ENTER_API_TOKEN_LOCAL enter.pollinations.ai/.testingtokens | cut -d= -f2)
```

---

## Test an Image Model

```bash
# Text-to-image
curl -s -o /tmp/test-image.jpg -w "HTTP %{http_code}, %{size_download} bytes\n" \
  "http://localhost:16384/prompt/a%20cute%20cat?model=MODEL_NAME&seed=42" \
  -H "x-enter-token: $TOKEN"

# Image editing (if model supports image input)
curl -s -o /tmp/test-edit.jpg -w "HTTP %{http_code}, %{size_download} bytes\n" \
  "http://localhost:16384/prompt/make%20it%20blue?model=MODEL_NAME&image=https://example.com/image.png" \
  -H "x-enter-token: $TOKEN"

file /tmp/test-image.jpg /tmp/test-edit.jpg
```

## Test a Video Model

```bash
curl -s -o /tmp/test-video.mp4 -w "HTTP %{http_code}, %{size_download} bytes\n" \
  "http://localhost:16384/prompt/a%20cat%20walking?model=MODEL_NAME&duration=3" \
  -H "x-enter-token: $TOKEN"

file /tmp/test-video.mp4
```

## Test a Text Model

```bash
# Via text service directly
curl -s -w "\nHTTP %{http_code}\n" \
  "http://localhost:16385/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "x-enter-token: $TOKEN" \
  -d '{"model":"MODEL_NAME","messages":[{"role":"user","content":"Say hello"}],"max_tokens":50}'

# Via enter gateway
curl -s -w "\nHTTP %{http_code}\n" \
  "http://localhost:3000/api/generate/v1/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_NAME","messages":[{"role":"user","content":"Say hello"}],"max_tokens":50}'
```

## Test an Audio Model

Audio routes through enter gateway only (no standalone service).

```bash
# Text-to-speech
curl -s -o /tmp/test-audio.mp3 -w "HTTP %{http_code}, %{size_download} bytes\n" \
  "http://localhost:3000/api/generate/audio/Hello%20world?voice=alloy&model=MODEL_NAME" \
  -H "Authorization: Bearer $API_KEY"

# OpenAI-compatible TTS
curl -s -o /tmp/test-tts.mp3 -w "HTTP %{http_code}, %{size_download} bytes\n" \
  "http://localhost:3000/api/generate/v1/audio/speech" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_NAME","input":"Hello world","voice":"alloy"}'

# Speech-to-text (whisper/scribe)
curl -s -w "\nHTTP %{http_code}\n" \
  "http://localhost:3000/api/generate/v1/audio/transcriptions" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/tmp/test-audio.mp3" \
  -F "model=MODEL_NAME"

file /tmp/test-audio.mp3
```

---

# Enter Integration Tests

Tests in `enter.pollinations.ai/test/integration/`:

| File | Models |
|------|--------|
| `image.test.ts` | Image models |
| `video.test.ts` | Video models |
| `text.test.ts` | Text/LLM models |
| `audio.test.ts` | TTS, music, transcription |

## Run tests for a specific model

```bash
cd enter.pollinations.ai
npm run decrypt-vars
npx vitest run --testNamePattern="MODEL_NAME"
```

## Run all tests by type

```bash
npx vitest run test/integration/image.test.ts
npx vitest run test/integration/video.test.ts
npx vitest run test/integration/text.test.ts
npx vitest run test/integration/audio.test.ts
```

## Alias resolution tests (fast, no network)

```bash
cd enter.pollinations.ai && npx vitest run test/aliases.test.ts
```

---

# Key Files by Model Type

## Image / Video
| File | Purpose |
|------|---------|
| `image.pollinations.ai/src/models/` | Model handler implementations |
| `image.pollinations.ai/src/models.ts` | IMAGE_CONFIG (type, defaults, video flags) |
| `image.pollinations.ai/src/createAndReturnImages.ts` | Image model routing |
| `image.pollinations.ai/src/createAndReturnVideos.ts` | Video model routing |
| `shared/registry/image.ts` | Registry: pricing, provider, aliases |

## Text
| File | Purpose |
|------|---------|
| `text.pollinations.ai/configs/modelConfigs.ts` | Model routing config |
| `text.pollinations.ai/availableModels.ts` | Service name to config mapping |
| `shared/registry/text.ts` | Registry: pricing, provider, aliases |

## Audio
| File | Purpose |
|------|---------|
| `enter.pollinations.ai/src/routes/audio.ts` | Audio route handlers |
| `shared/registry/audio.ts` | Registry: pricing, voices, aliases |

## Shared
| File | Purpose |
|------|---------|
| `<service>/.env` | API keys |
| `<service>/secrets/env.json` | Encrypted keys (sops) |
| `enter.pollinations.ai/test/integration/` | All integration tests |

Related Skills

model-management

4286
from pollinations/pollinations

Add, update, or remove text/image/video models. Handles any provider.

model-debugging

4286
from pollinations/pollinations

Debug and diagnose model errors in Pollinations services. Analyze logs, find error patterns, identify affected users. For taking action on user tiers, see tier-management skill.

monitor-services

4286
from pollinations/pollinations

Health check and auto-restart all Pollinations GPU services (Flux/Z-Image on RunPod, LTX-2 on GH200, Klein on RunPod, legacy image on OVH, Sana on Vast.ai). Use with /loop for recurring checks.

founder-meditation

4286
from pollinations/pollinations

When something goes wrong — build failures, crashes, errors, test failures, deployment issues — generate a short calming meditation with TTS audio to reassure the user that everything will be okay.

web-research

4286
from pollinations/pollinations

Query Pollinations text API with web-search models (gemini-search, perplexity-fast, nomnom, etc.). Use when you need web search grounded answers via Pollinations.

voting-status

4286
from pollinations/pollinations

Create and post ASCII art voting status diagrams to GitHub issues and Discord. Use when asked to update voting, show voting results, or announce voting status.

tinybird-deploy

4286
from pollinations/pollinations

Deploy Tinybird pipes and datasources for enter.pollinations.ai observability. Validates and pushes changes to Tinybird Cloud.

tier-management

4286
from pollinations/pollinations

Evaluate and update Pollinations user tiers. Check balances, upgrade devs, batch process users. For finding users with errors, see model-debugging skill first.

spending-analysis

4286
from pollinations/pollinations

Analyze Pollinations revenue, pack purchases, and tier spending patterns. Query Polar for payment history and Tinybird for usage data.

r2-glacier-migration

4286
from pollinations/pollinations

Monitor and manage R2 to AWS Glacier Deep Archive migration. Use when checking transfer status, resuming transfers, or managing the archive migration.

issue-maker

4286
from pollinations/pollinations

Create GitHub issues following Pollinations team conventions. Use when asked to create issues, track work, or plan features.

enter-services

4286
from pollinations/pollinations

Deploy and manage enter.pollinations.ai text/image services on EC2 and Cloudflare Workers. Requires: SSH keys, sops, wrangler.