Images · Text to image

MOSS Image API

MOSS Image text-to-image: Chinese and English text rendering and layout control (natural language, tag sequences or JSON layouts), 512-2048 px per side, up to 4 images per request.

Price
From $0.01 per run $0.05/MP
Typical time
~20 s
Model id
moss_image

MOSS Image runs on one varg API key and one credit balance, the same as every other model here. You pay the provider's price, with no markup.

POST /v2/tools/image/call
curl -X POST https://api.varg.ai/v2/tools/image/call \
  -H "Authorization: Bearer $VARG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "moss_image",
  "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\""
}'

MOSS Image pricing

From $0.01 per run. Prices are in US dollars and are the provider's own, with no markup. For the exact price of a request, send the same body to POST https://api.varg.ai/v2/estimate.

  • fal $0.05/MP
    fal:fal-ai/moss-image

    Text to image MOSS Image text-to-image: accurate Chinese/English text and layout control (prompt may be a JSON layout), presets or custom sizes 512-2048 px, 1-4 images, $0.05 per megapixel.

    Per megapixel
    $0.05
    Minimum charge
    $0.01
    Most one request can cost
    $0.84
    Typical time
    ~20 s

MOSS Image inputs

The JSON body of the request. Media inputs are URLs: upload a local file with POST /v2/files and pass the URL it returns. Full JSON Schema, no key needed: api.varg.ai/v2/tools/image?model=moss_image

MOSS Image request fields
FieldWhat it does
model string requiredmoss_image picks a route automatically.
prompt string —
files array of { url } —
aspect_ratio string Allowed e.g. 16:9 | 9:16 | 1:1 | 4:3 | 3:4 | 21:9 | auto

Provider options

Optional, under provider_options.<provider>. Only the options of the provider that runs the job apply; pin a route to choose it.

provider_options.fal

MOSS Image options for fal
FieldWhat it does
prompt string Text prompt for image generation. Supports natural language, tag sequences, and JSON layouts.
negative_prompt string Negative prompt. When empty, guidance uses transformer layer skipping for the negative branch.
seed integer Allowed -9007199254740991–9007199254740991
sync_mode boolean Return images as data URIs instead of storing them in request history.
image_size string Allowed square_hd | square | portrait_4_3 | portrait_16_9 | landscape_4_3 | landscape_16_9
num_images integer Number of images to generate. Allowed 1–4
output_format string Allowed jpeg | png | webp
guidance_scale number Classifier-free guidance scale. Allowed 0–10
num_inference_steps integer Number of denoising steps. Allowed 1–100
enable_safety_checker boolean Enable output content moderation. Disabling it requires account authorization; unauthorized requests are always checked, and images flagged as unsafe are returned as black images.
enable_prompt_expansion boolean Plan a structured layout from your prompt before generation. Preserves requested visible text and uses the selected image dimensions. If enhancement is unavailable, uses the original prompt.

Call the MOSS Image API

POST https://api.varg.ai/v2/tools/image/call with Authorization: Bearer $VARG_API_KEY. It answers 202 with a job right away.

1. Send the request

cURL
curl -X POST https://api.varg.ai/v2/tools/image/call \
  -H "Authorization: Bearer $VARG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "moss_image",
  "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\""
}'
JavaScript
JavaScript
const headers = {
  Authorization: `Bearer ${process.env.VARG_API_KEY}`,
  'Content-Type': 'application/json',
}

const res = await fetch('https://api.varg.ai/v2/tools/image/call', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    "model": "moss_image",
    "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\""
  }),
})
const job = await res.json() // { id: "job_…", status: "queued" }
Python
Python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['VARG_API_KEY']}"}

job = requests.post(
    "https://api.varg.ai/v2/tools/image/call",
    headers=headers,
    json={
      "model": "moss_image",
      "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\""
    },
).json()  # {"id": "job_…", "status": "queued"}

2. Get the result

Poll the job until its status is completed, failed or cancelled; MOSS Image typically takes about 20 s. The result is at output.outputs[0].url.

GET /v2/jobs/{id}
curl https://api.varg.ai/v2/jobs/$JOB_ID \
  -H "Authorization: Bearer $VARG_API_KEY"

# Poll until "status" is completed, failed or cancelled.
# The result is in output.outputs[0].url
JavaScript
JavaScript
let current = job
while (!['completed', 'failed', 'cancelled'].includes(current.status)) {
  await new Promise((resolve) => setTimeout(resolve, 3000))
  current = await (await fetch(`https://api.varg.ai/v2/jobs/${current.id}`, { headers })).json()
}
console.log(current.output?.outputs?.[0]?.url)
Python
Python
import time

while job["status"] not in ("completed", "failed", "cancelled"):
    time.sleep(3)
    job = requests.get(f"https://api.varg.ai/v2/jobs/{job['id']}", headers=headers).json()

print(job["output"]["outputs"][0]["url"])
Or take a webhook instead of polling

Add options.webhook_url and varg POSTs the finished job to it.

request body
{
  "model": "moss_image",
  "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\"",
  "options": {
    "webhook_url": "https://your-app.com/varg-webhook"
  }
}

From Claude, ChatGPT or Cursor (MCP)

The varg MCP server, https://mcp.varg.ai/mcp, runs MOSS Image with call_tool. Sign in with varg, no API key to paste. How to connect it

call_tool
{
  "tool": "image",
  "input": {
    "model": "moss_image",
    "prompt": "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. A small sticky note on the refrigerator door is handwritten in Chinese:\n\"记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\""
  },
  "wait": true
}

MOSS Image API: questions

How much does MOSS Image cost on varg?
MOSS Image costs from $0.01 per run on varg ($0.05/MP on the cheapest route). varg charges the provider's price with no markup, from one credit balance. For the exact price of a request before you run it, send the same body to POST https://api.varg.ai/v2/estimate.
How do I call the MOSS Image API?
Send POST https://api.varg.ai/v2/tools/image/call with the header "Authorization: Bearer $VARG_API_KEY" and a JSON body that includes "model": "moss_image". The call answers 202 with a job right away. Poll GET https://api.varg.ai/v2/jobs/{id} until "status" is "completed", then read output.outputs[0].url, or pass options.webhook_url to be called back.
Can I use MOSS Image from Claude, ChatGPT or Cursor?
Yes. Add the varg MCP server (https://mcp.varg.ai/mcp) to Claude, ChatGPT, Cursor or any other MCP client and sign in with varg, with no API key to paste. The agent runs MOSS Image with call_tool, passing tool "image" and "model": "moss_image".
How long does a MOSS Image request take?
Typically about 20 s on the fastest route, by the catalog's estimate. The API answers at once with a job id, so nothing waits on an open connection while it runs.

For AI agents: this page as Markdown is varg.ai/models/moss_image.md, and every model is listed in varg.ai/models/llms.txt.