Run 150+ AI apps in the cloud with a simple CLI. No GPU required.
Install CLI
curl -fsSL https://cli.inference.sh | sh
infsh login
What does the installer do? The install script detects your OS and architecture, downloads the correct binary from dist.inference.sh, verifies its SHA-256 checksum, and places it in your PATH. That's it — no elevated permissions, no background processes, no telemetry. If you have cosign installed, the installer also verifies the Sigstore signature automatically.
Manual install (if you prefer not to pipe to sh):
# Download the binary and checksums
curl -LO https://dist.inference.sh/cli/checksums.txt
curl -LO $(curl -fsSL https://dist.inference.sh/cli/manifest.json | grep -o '"url":"[^"]*"' | grep $(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') | head -1 | cut -d'"' -f4)
# Verify checksum
sha256sum -c checksums.txt --ignore-missing
# Extract and install
tar -xzf inferencesh-cli-*.tar.gz
mv inferencesh-cli-* ~/.local/bin/inferencesh
Quick Examples
# Generate an image
infsh app run falai/flux-dev-lora --input '{"prompt": "a cat astronaut"}'
# Generate a video
infsh app run google/veo-3-1-fast --input '{"prompt": "drone over mountains"}'
# Call Claude
infsh app run openrouter/claude-sonnet-45 --input '{"prompt": "Explain quantum computing"}'
# Web search
infsh app run tavily/search-assistant --input '{"query": "latest AI news"}'
# Post to Twitter
infsh app run x/post-tweet --input '{"text": "Hello from AI!"}'
# Generate 3D model
infsh app run infsh/rodin-3d-generator --input '{"prompt": "a wooden chair"}'
Local File Uploads
The CLI automatically uploads local files when you provide a path instead of a URL:
# Upscale a local image
infsh app run falai/topaz-image-upscaler --input '{"image": "/path/to/photo.jpg", "upscale_factor": 2}'
# Image-to-video from local file
infsh app run falai/wan-2-5-i2v --input '{"image": "./my-image.png", "prompt": "make it move"}'
# Avatar with local audio and image
infsh app run bytedance/omnihuman-1-5 --input '{"audio": "/path/to/speech.mp3", "image": "/path/to/face.jpg"}'
# Post tweet with local media
infsh app run x/post-create --input '{"text": "Check this out!", "media": "./screenshot.png"}'
Commands
| Task |
Command |
| List all apps |
infsh app list |
| Search apps |
infsh app list --search "flux" |
| Filter by category |
infsh app list --category image |
| Get app details |
infsh app get google/veo-3-1-fast |
| Generate sample input |
infsh app sample google/veo-3-1-fast --save input.json |
| Run app |
infsh app run google/veo-3-1-fast --input input.json |
| Run without waiting |
infsh app run <app> --input input.json --no-wait |
| Check task status |
infsh task get <task-id> |
What's Available
| Category |
Examples |
| Image |
FLUX, Gemini 3 Pro, Grok Imagine, Seedream 4.5, Reve, Topaz Upscaler |
| Video |
Veo 3.1, Seedance 1.5, Wan 2.5, OmniHuman, Fabric, HunyuanVideo Foley |
| LLMs |
Claude Opus/Sonnet/Haiku, Gemini 3 Pro, Kimi K2, GLM-4, any OpenRouter model |
| Search |
Tavily Search, Tavily Extract, Exa Search, Exa Answer, Exa Extract |
| 3D |
Rodin 3D Generator |
| Twitter/X |
post-tweet, post-create, dm-send, user-follow, post-like, post-retweet |
| Utilities |
Media merger, caption videos, image stitching, audio extraction |
Related Skills
# Image generation (FLUX, Gemini, Grok, Seedream)
npx skills add inference-sh/skills@ai-image-generation
# Video generation (Veo, Seedance, Wan, OmniHuman)
npx skills add inference-sh/skills@ai-video-generation
# LLMs (Claude, Gemini, Kimi, GLM via OpenRouter)
npx skills add inference-sh/skills@llm-models
# Web search (Tavily, Exa)
npx skills add inference-sh/skills@web-search
# AI avatars & lipsync (OmniHuman, Fabric, PixVerse)
npx skills add inference-sh/skills@ai-avatar-video
# Twitter/X automation
npx skills add inference-sh/skills@twitter-automation
# Model-specific
npx skills add inference-sh/skills@flux-image
npx skills add inference-sh/skills@google-veo
# Utilities
npx skills add inference-sh/skills@image-upscaling
npx skills add inference-sh/skills@background-removal
Reference Files
- Authentication & Setup
- Discovering Apps
- Running Apps
- CLI Reference
Documentation
Workflow
- Discover —
infsh app list --search "<keyword>" or infsh app list --category <image|video|llm|search|3d|x|utility> to find the right app
- Inspect —
infsh app get <app-id> for description, pricing, input schema, and rate limits
- Generate sample input —
infsh app sample <app-id> --save input.json to get a valid input template pre-filled with defaults
- Customize — edit the JSON input file: replace prompts, file paths, or configuration values
- Run —
infsh app run <app-id> --input input.json for synchronous execution, or --no-wait for long-running tasks
- Check status —
infsh task get <task-id> to poll progress of async tasks; infsh task logs <task-id> for streaming output
- Retrieve output — outputs are URLs (images, videos) or text responses; download with
infsh task download <task-id>
For multi-step pipelines, chain apps: run the first app, extract its output URL, feed it as input to the next app (e.g., generate image → upscale, or generate video → add audio).
Error Handling
| Error |
Cause |
Fix |
infsh: command not found |
CLI not installed or not in PATH |
Run `curl -fsSL https://cli.inference.sh |
401 Unauthorized |
Not logged in or token expired |
Run infsh login and re-authenticate |
402 Payment Required |
Account has no credits or payment method |
Check infsh billing; add credits via inference.sh dashboard |
429 Too Many Requests |
Rate limit exceeded for the app or account tier |
Wait for the Retry-After header duration; for paid tiers, request a limit increase |
400 Bad Request on file upload |
File path does not exist, is a directory, or exceeds size limits |
Verify the file path with ls -la; check the app's max input size in infsh app get <app-id> |
Task timed out (HTTP 504 or task status failed) |
App execution exceeded max duration |
Check infsh task get <task-id> for error details; retry with smaller input or check app status page |
502 Bad Gateway or connection errors |
inference.sh backend or model provider is down |
Check https://status.inference.sh; retry with exponential backoff (2s, 4s, 8s) |
| Output URL returns 404 |
Generated asset expired (files are ephemeral) |
Re-run the job; for permanent storage, download immediately with infsh task download <task-id> |
JSON parse error on --input |
Input file is not valid JSON or schema mismatch |
Use infsh app sample <app-id> --save input.json to regenerate a valid template |
| Image/video generation produces blank or corrupted output |
Model inference failed silently |
Re-run the job; check app-specific known issues in infsh app get <app-id>; try a different model for the same task |
Checklist
Sources
- inference.sh CLI documentation — installation, commands, authentication
- inference.sh Apps Catalog — full app library with schemas and examples
- OpenRouter API — LLM model routing and pricing
- FLUX documentation (fal.ai, replicate.com) — image generation parameters and best practices
- Veo API (Google DeepMind) — video generation capabilities and limitations
- Tavily Search API (tavily.com) — web search and extraction endpoints
- Exa API (exa.ai) — semantic search and content extraction
- x.com Developer API — Twitter/X posting, DMs, and engagement endpoints
Anti-Patterns
| Anti-pattern |
Why it fails |
Fix |
Not checking infsh app get before running |
Input schema varies between apps; guessing fields causes 400 errors |
Always run infsh app sample first to see the exact schema |
| Hardcoding file paths without verifying they exist |
The CLI auto-uploads relative paths; missing files produce confusing errors |
Use absolute paths or verify relative paths with Test-Path before running |
Not using --no-wait for long-running tasks |
Synchronous runs block the terminal for minutes on video/3D generation |
Use --no-wait and poll with infsh task get <id> for tasks expected to take > 30s |
| Ignoring rate limits and credit costs |
Each app has different pricing; some cost $0.50+ per run |
Check infsh app get <app-id> for cost estimate before bulk/generating runs |
| Using the cheapest model for everything |
OpenRouter free models may have lower quality or stricter rate limits |
Match model quality to task importance; paid tiers are more reliable |
| Not saving task IDs |
Async tasks complete after the terminal session; without the ID you can't retrieve results |
Log all task IDs: infsh task get <id> > task-<id>-result.json |
| Running image generation without checking supported resolutions/aspect ratios |
Models silently crop or stretch to supported dimensions |
Check infsh app get for supported_sizes or aspect_ratios field |
1---2name: agent-tools3description: Run 150+ AI apps via inference.sh CLI - image generation, video creation, LLMs, search, 3D, Twitter automation. Models: FLUX, Veo, Gemini, Grok, Claude, Seedance, OmniHuman, Tavily, Exa, OpenRouter, and many more. Use when running AI apps, generating images/videos, calling LLMs, web search, or automating Twitter. Triggers: inference.sh, infsh, ai model, run ai, serverless ai, ai api, flux, veo, claude api, image generation, video generation, openrouter, tavily, exa search, twitter api, grok4license: MIT5---678# [inference.sh](https://inference.sh)910Run 150+ AI apps in the cloud with a simple CLI. No GPU required.1112](https://cloud.inference.sh/app/files/u/4mg21r6ta37mpaz6ktzwtt8krr/01kgjw8atdxgkrsr8a2t5peq7b.jpeg)1314## Install CLI1516```bash17curl -fsSL https://cli.inference.sh | sh18infsh login19```2021> **What does the installer do?** The [install script](https://cli.inference.sh) detects your OS and architecture, downloads the correct binary from `dist.inference.sh`, verifies its SHA-256 checksum, and places it in your PATH. That's it — no elevated permissions, no background processes, no telemetry. If you have [cosign](https://docs.sigstore.dev/cosign/system_config/installation/) installed, the installer also verifies the Sigstore signature automatically.22>23> **Manual install** (if you prefer not to pipe to sh):24> ```bash25> # Download the binary and checksums26> curl -LO https://dist.inference.sh/cli/checksums.txt27> curl -LO $(curl -fsSL https://dist.inference.sh/cli/manifest.json | grep -o '"url":"[^"]*"' | grep $(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') | head -1 | cut -d'"' -f4)28> # Verify checksum29> sha256sum -c checksums.txt --ignore-missing30> # Extract and install31> tar -xzf inferencesh-cli-*.tar.gz32> mv inferencesh-cli-* ~/.local/bin/inferencesh33> ```3435## Quick Examples3637```bash38# Generate an image39infsh app run falai/flux-dev-lora --input '{"prompt": "a cat astronaut"}'4041# Generate a video42infsh app run google/veo-3-1-fast --input '{"prompt": "drone over mountains"}'4344# Call Claude45infsh app run openrouter/claude-sonnet-45 --input '{"prompt": "Explain quantum computing"}'4647# Web search48infsh app run tavily/search-assistant --input '{"query": "latest AI news"}'4950# Post to Twitter51infsh app run x/post-tweet --input '{"text": "Hello from AI!"}'5253# Generate 3D model54infsh app run infsh/rodin-3d-generator --input '{"prompt": "a wooden chair"}'55```5657## Local File Uploads5859The CLI automatically uploads local files when you provide a path instead of a URL:6061```bash62# Upscale a local image63infsh app run falai/topaz-image-upscaler --input '{"image": "/path/to/photo.jpg", "upscale_factor": 2}'6465# Image-to-video from local file66infsh app run falai/wan-2-5-i2v --input '{"image": "./my-image.png", "prompt": "make it move"}'6768# Avatar with local audio and image69infsh app run bytedance/omnihuman-1-5 --input '{"audio": "/path/to/speech.mp3", "image": "/path/to/face.jpg"}'7071# Post tweet with local media72infsh app run x/post-create --input '{"text": "Check this out!", "media": "./screenshot.png"}'73```7475## Commands7677| Task | Command |78|------|---------|79| List all apps | `infsh app list` |80| Search apps | `infsh app list --search "flux"` |81| Filter by category | `infsh app list --category image` |82| Get app details | `infsh app get google/veo-3-1-fast` |83| Generate sample input | `infsh app sample google/veo-3-1-fast --save input.json` |84| Run app | `infsh app run google/veo-3-1-fast --input input.json` |85| Run without waiting | `infsh app run <app> --input input.json --no-wait` |86| Check task status | `infsh task get <task-id>` |8788## What's Available8990| Category | Examples |91|----------|----------|92| **Image** | FLUX, Gemini 3 Pro, Grok Imagine, Seedream 4.5, Reve, Topaz Upscaler |93| **Video** | Veo 3.1, Seedance 1.5, Wan 2.5, OmniHuman, Fabric, HunyuanVideo Foley |94| **LLMs** | Claude Opus/Sonnet/Haiku, Gemini 3 Pro, Kimi K2, GLM-4, any OpenRouter model |95| **Search** | Tavily Search, Tavily Extract, Exa Search, Exa Answer, Exa Extract |96| **3D** | Rodin 3D Generator |97| **Twitter/X** | post-tweet, post-create, dm-send, user-follow, post-like, post-retweet |98| **Utilities** | Media merger, caption videos, image stitching, audio extraction |99100## Related Skills101102```bash103# Image generation (FLUX, Gemini, Grok, Seedream)104npx skills add inference-sh/skills@ai-image-generation105106# Video generation (Veo, Seedance, Wan, OmniHuman)107npx skills add inference-sh/skills@ai-video-generation108109# LLMs (Claude, Gemini, Kimi, GLM via OpenRouter)110npx skills add inference-sh/skills@llm-models111112# Web search (Tavily, Exa)113npx skills add inference-sh/skills@web-search114115# AI avatars & lipsync (OmniHuman, Fabric, PixVerse)116npx skills add inference-sh/skills@ai-avatar-video117118# Twitter/X automation119npx skills add inference-sh/skills@twitter-automation120121# Model-specific122npx skills add inference-sh/skills@flux-image123npx skills add inference-sh/skills@google-veo124125# Utilities126npx skills add inference-sh/skills@image-upscaling127npx skills add inference-sh/skills@background-removal128```129130## Reference Files131132- [Authentication & Setup](references/authentication.md)133- [Discovering Apps](references/app-discovery.md)134- [Running Apps](references/running-apps.md)135- [CLI Reference](references/cli-reference.md)136137## Documentation138139- [Agent Skills Overview](https://inference.sh/blog/skills/skills-overview) - The open standard for AI capabilities140- [Getting Started](https://inference.sh/docs/getting-started/introduction) - Introduction to inference.sh141- [What is inference.sh?](https://inference.sh/docs/getting-started/what-is-inference) - Platform overview142- [Apps Overview](https://inference.sh/docs/apps/overview) - Understanding the app ecosystem143- [CLI Setup](https://inference.sh/docs/extend/cli-setup) - Installing the CLI144- [Workflows vs Agents](https://inference.sh/blog/concepts/workflows-vs-agents) - When to use each145- [Why Agent Runtimes Matter](https://inference.sh/blog/agent-runtime/why-runtimes-matter) - Runtime benefits146147## Workflow1481491. **Discover** — `infsh app list --search "<keyword>"` or `infsh app list --category <image|video|llm|search|3d|x|utility>` to find the right app1502. **Inspect** — `infsh app get <app-id>` for description, pricing, input schema, and rate limits1513. **Generate sample input** — `infsh app sample <app-id> --save input.json` to get a valid input template pre-filled with defaults1524. **Customize** — edit the JSON input file: replace prompts, file paths, or configuration values1535. **Run** — `infsh app run <app-id> --input input.json` for synchronous execution, or `--no-wait` for long-running tasks1546. **Check status** — `infsh task get <task-id>` to poll progress of async tasks; `infsh task logs <task-id>` for streaming output1557. **Retrieve output** — outputs are URLs (images, videos) or text responses; download with `infsh task download <task-id>`156157For multi-step pipelines, chain apps: run the first app, extract its output URL, feed it as input to the next app (e.g., generate image → upscale, or generate video → add audio).158159## Error Handling160161| Error | Cause | Fix |162|-------|-------|-----|163| `infsh: command not found` | CLI not installed or not in PATH | Run `curl -fsSL https://cli.inference.sh | sh` or check PATH includes the install directory |164| `401 Unauthorized` | Not logged in or token expired | Run `infsh login` and re-authenticate |165| `402 Payment Required` | Account has no credits or payment method | Check `infsh billing`; add credits via inference.sh dashboard |166| `429 Too Many Requests` | Rate limit exceeded for the app or account tier | Wait for the `Retry-After` header duration; for paid tiers, request a limit increase |167| `400 Bad Request` on file upload | File path does not exist, is a directory, or exceeds size limits | Verify the file path with `ls -la`; check the app's max input size in `infsh app get <app-id>` |168| `Task timed out` (HTTP 504 or task status `failed`) | App execution exceeded max duration | Check `infsh task get <task-id>` for error details; retry with smaller input or check app status page |169| `502 Bad Gateway` or connection errors | inference.sh backend or model provider is down | Check https://status.inference.sh; retry with exponential backoff (2s, 4s, 8s) |170| Output URL returns 404 | Generated asset expired (files are ephemeral) | Re-run the job; for permanent storage, download immediately with `infsh task download <task-id>` |171| JSON parse error on `--input` | Input file is not valid JSON or schema mismatch | Use `infsh app sample <app-id> --save input.json` to regenerate a valid template |172| Image/video generation produces blank or corrupted output | Model inference failed silently | Re-run the job; check app-specific known issues in `infsh app get <app-id>`; try a different model for the same task |173174## Checklist175176- [ ] App is authenticated before running (`infsh login check`)177- [ ] Model supports the requested input format (image/video/text sizes)178- [ ] Task ID saved for async operations to retrieve results later179- [ ] Credit cost checked before bulk operations180- [ ] Output format confirmed (URL, file, or stdout) before passing to next step181182## Sources183184- [inference.sh CLI documentation](https://cli.inference.sh) — installation, commands, authentication185- [inference.sh Apps Catalog](https://inference.sh/apps) — full app library with schemas and examples186- [OpenRouter API](https://openrouter.ai/docs) — LLM model routing and pricing187- FLUX documentation (fal.ai, replicate.com) — image generation parameters and best practices188- Veo API (Google DeepMind) — video generation capabilities and limitations189- Tavily Search API (tavily.com) — web search and extraction endpoints190- Exa API (exa.ai) — semantic search and content extraction191- x.com Developer API — Twitter/X posting, DMs, and engagement endpoints192193## Anti-Patterns194195| Anti-pattern | Why it fails | Fix |196|-------------|-------------|-----|197| Not checking `infsh app get` before running | Input schema varies between apps; guessing fields causes 400 errors | Always run `infsh app sample` first to see the exact schema |198| Hardcoding file paths without verifying they exist | The CLI auto-uploads relative paths; missing files produce confusing errors | Use absolute paths or verify relative paths with `Test-Path` before running |199| Not using `--no-wait` for long-running tasks | Synchronous runs block the terminal for minutes on video/3D generation | Use `--no-wait` and poll with `infsh task get <id>` for tasks expected to take > 30s |200| Ignoring rate limits and credit costs | Each app has different pricing; some cost $0.50+ per run | Check `infsh app get <app-id>` for cost estimate before bulk/generating runs |201| Using the cheapest model for everything | OpenRouter free models may have lower quality or stricter rate limits | Match model quality to task importance; paid tiers are more reliable |202| Not saving task IDs | Async tasks complete after the terminal session; without the ID you can't retrieve results | Log all task IDs: `infsh task get <id> > task-<id>-result.json` |203| Running image generation without checking supported resolutions/aspect ratios | Models silently crop or stretch to supported dimensions | Check `infsh app get` for `supported_sizes` or `aspect_ratios` field |