تولید تصویر از متن، از همان endpoint سازگار با OpenAI و با همان کلید. پشت این endpoint GPT Image شرکت OpenAI، Nano Banana گوگل (مدلهای تصویری Gemini) و دهها مدل تصویری دیگر از راه OpenRouter هستند. پرامپت فارسی را مستقیم بفرستید؛ GPT Image و Nano Banana متن فارسی را خوب میفهمند و برای بقیه، پرامپت انگلیسی نتیجهٔ مطمئنتری دارد. ولی برای نوشتهٔ فارسی داخل خود تصویر قولی نمیدهیم؛ اگر تیتر فارسی لازم دارید، آن را بعداً با ابزار طراحی روی تصویر بگذارید. فهرست کامل و قیمت هر مدل در صفحهٔ مدلها.
شناسههای dall-e-2، dall-e-3، imagen-4 (Google) و grok-2-image (xAI) دیگر ارائه نمیشوند و درخواست به آنها خطای ۴۰۴ با کد model_discontinued میگیرد. مدلهای تصویری گوگل روی درگاه همان Nano Banana هستند، نه Imagen.
GPT Image (OpenAI)
import base64
img = client.images.generate(
model="gpt-image-1",
prompt="لوگوی مینیمال یک کافه با رنگ طلایی روی پسزمینهٔ ساده",
size="1024x1024",
quality="medium", # low | medium | high
n=1,
)
open("logo.png", "wb").write(base64.b64decode(img.data[0].b64_json))
const img = await client.images.generate({
model: "gpt-image-1",
prompt: "لوگوی مینیمال یک کافه با رنگ طلایی روی پسزمینهٔ ساده",
size: "1024x1024",
quality: "medium",
});
// مدلهای GPT Image همیشه base64 برمیگردانند
require("fs").writeFileSync("logo.png", Buffer.from(img.data[0].b64_json, "base64"));
curl https://netarz.ir/api/ai/v1/images/generations \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-flare",
"prompt": "لوگوی مینیمال یک کافه با رنگ طلایی روی پسزمینهٔ ساده",
"size": "1536x1024",
"quality": "high"
}'
{
"created": 1756540800,
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA…" }
],
"usage": {
"input_tokens": 24,
"output_tokens": 4160,
"total_tokens": 4184
}
}
پارامترها
| پارامتر | توضیح |
|---|---|
model الزامی | یکی از مدلهای خانوادهٔ تصویر؛ فهرست. اندازهها و کیفیتهای مجاز هر مدل در capabilities.sizes و capabilities.quality آمده است. |
prompt الزامی | توصیف تصویر. |
n | تعداد تصویر (۱ تا ۱۰). هر تصویر جداگانه هزینه دارد. |
size | 1024x1024 (مربع)، 1024x1536 (عمودی) یا 1536x1024 (افقی). پیشفرض 1024x1024. |
quality | low | medium | high. مدلهای GPT Image 2.5 دو پلهٔ بالاتر هم دارند: xhigh و max. |
response_format | مدلهای GPT Image همیشه b64_json برمیگردانند؛ روی url هم لینک نمیگیرید. |
style، background، output_format | پارامترهای اختصاصی مدل؛ عبور مستقیم. |
Nano Banana (Gemini)
مدلهای تصویری گوگل را با همان کد و همان کلید صدا میزنید؛ لازم نیست کتابخانه یا کلید جداگانهای از گوگل داشته باشید. درگاه درخواست را از قالب OpenAI به قالب گوگل ترجمه میکند و پاسخ را دوباره در قالب OpenAI به شما میدهد.
| شناسهٔ مدل | نام | وضوح |
|---|---|---|
gemini-3-pro-image | Nano Banana Pro | 1K، 2K، 4K |
gemini-3.1-flash-image | Nano Banana 2 | 1K، 2K، 4K |
gemini-3.1-flash-lite-image | Nano Banana 2 Lite | فقط 1K |
import base64
img = client.images.generate(
model="gemini-3.1-flash-image",
prompt="عکس محصول: یک فنجان قهوه روی میز چوبی، نور گرم صبح، پسزمینهٔ محو",
size="1536x1024", # نزدیکترین نسبت قاب: 3:2
quality="2K", # 1K | 2K | 4K
)
open("coffee.jpg", "wb").write(base64.b64decode(img.data[0].b64_json))
const img = await client.images.generate({
model: "gemini-3-pro-image",
prompt: "نمای باز از یک کتابخانهٔ قدیمی با نور پنجره، سبک نقاشی آبرنگ",
aspect_ratio: "16:9", // بهجای size هم پذیرفته میشود
quality: "4K",
});
// خروجی Nano Banana تصویر JPEG است
require("fs").writeFileSync("library.jpg", Buffer.from(img.data[0].b64_json, "base64"));
curl https://netarz.ir/api/ai/v1/images/generations \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-lite-image",
"prompt": "تصویر عمودی یک گلدان سبز کنار پنجره، سبک مینیمال",
"size": "1024x1792",
"n": 2
}'
{
"created": 1790899200,
"data": [
{ "b64_json": "/9j/4AAQSkZJRgABAQAAAQ…", "output_format": "jpeg" }
],
"usage": {
"input_tokens": 21,
"output_tokens": 1680,
"total_tokens": 1701
}
}
خروجی این مدلها تصویر JPEG است: فایل را در data[].b64_json میگیرید و output_format برابر jpeg است. فایل را با پسوند .jpg ذخیره کنید.
پارامترها
| پارامتر | توضیح |
|---|---|
model الزامی | یکی از سه شناسهٔ جدول بالا. |
prompt الزامی | توصیف تصویر، یا دستور ویرایش وقتی تصویر مرجع میفرستید. |
n | تعداد تصویر، ۱ تا ۴. هر تصویر یک درخواست جدا به گوگل است و توکنهای خودش را دارد. |
size | اندازه به سبک OpenAI، مثل 1536x1024. این مدلها پیکسل دقیق نمیگیرند؛ درگاه نزدیکترین نسبت قاب (aspect ratio) را انتخاب میکند: 1:1، 2:3، 3:2، 3:4، 4:3، 4:5، 5:4، 9:16، 16:9 یا 21:9. |
aspect_ratio | اگر نسبت قاب را خودتان بفرستید (یکی از مقدارهای بالا)، به size ترجیح داده میشود. |
quality | وضوح تصویر: 1K | 2K | 4K. مدل Lite فقط 1K دارد. نام گوگلی همین فیلد، image_size، هم پذیرفته میشود. |
image | تصویر مرجع برای ویرایش یا ترکیب: یک رشته یا آرایهای تا ۴ تصویر، به شکل data URL (data:image/png;base64,…) یا base64 خام. لینک اینترنتی خوانده نمیشود؛ فایل را خودتان به base64 تبدیل کنید. |
size فقط قاب را تعیین میکند، نه وضوح را. اگر quality (یا image_size) را نفرستید، تصویر 1K ساخته میشود؛ پس کدی که از OpenAI منتقل میکنید با "size": "1536x1024" همان تصویر 1K ارزانتر را میگیرد. برای 2K یا 4K، "quality": "2K" یا "4K" را صریح بفرستید. ("quality": "high" به سبک OpenAI هم 2K حساب میشود.)
ویرایش با تصویر مرجع
عکس خودتان را در فیلد image بفرستید و در prompt بنویسید چه تغییری میخواهید. با چند تصویر مرجع میتوانید اجزای چند عکس را در یک تصویر کنار هم بگذارید. در SDK پایتون، این فیلد را با extra_body میفرستید:
import base64
photo = base64.b64encode(open("product.png", "rb").read()).decode()
img = client.images.generate(
model="gemini-3.1-flash-image",
prompt="پسزمینهٔ این عکس را سفید و ساده کنید و سایهٔ نرمی زیر محصول بگذارید",
quality="2K",
# تا ۴ تصویر مرجع؛ data URL یا base64 خام — لینک اینترنتی خوانده نمیشود
extra_body={"image": [f"data:image/png;base64,{photo}"]},
)
open("product-white.jpg", "wb").write(base64.b64decode(img.data[0].b64_json))
تصویرهای مرجع جزو بدنهٔ درخواستاند و با آن از سقف اندازهٔ درخواست حساب میشوند؛ سقف را در محدودیتها و امنیت ببینید.
اگر فیلتر محتوایی گوگل درخواستی را رد کند، پاسخ خطای ۴۰۰ با کد upstream_rejected است و هزینهای از اعتبارتان کم نمیشود. توصیف را تغییر دهید و دوباره بفرستید؛ بیشتر وقتها نام یک شخص واقعی یا یک اثر مشخص در توصیف، علت رد شدن است.
مدلهای تصویر از راه OpenRouter
دهها مدل تصویری دیگر هم با شناسهٔ openrouter/… از همین endpoint کار میکنند؛ مثل FLUX، Recraft (با خروجی برداری SVG)، Seedream، Qwen Image، Grok Imagine و Riverflow. کد همان کد بالاست؛ فقط model عوض میشود. هر مدل اندازهها و نسبتهای خودش را دارد و اندازهای را که نسازد با خطای ۴۰۰ رد میکند، بدون هزینه.
| پارامتر | روی این مدلها |
|---|---|
size | پیکسل دقیق (2048x2048) یا یک پله (1K، 2K، 4K). |
resolution، aspect_ratio | جایگزین size: پله و نسبت جدا، مثل "2K" و "16:9". |
quality | low | medium | high؛ مدلی که کیفیت جدا ندارد آن را نادیده میگیرد. |
input_references | تصویرهای مرجع برای ویرایش یا همسبکسازی، بهصورت آرایهٔ {"type":"image_url","image_url":{"url":"data:image/png;base64,…"}}. |
output_format، background، seed | اگر مدل پشتیبانی کند اعمال میشود. |
پاسخ همیشه b64_json است و کنار هر تصویر media_type میآید.
قیمتگذاری
مدلهای تصویری دو جور حساب میشوند: توکنی (GPT Image، Nano Banana و چند مدل دیگر) و بهازای هر تصویر (بیشتر مدلهای OpenRouter، با کلید per_image). در هر دو حالت، هزینهٔ واقعی همان درخواست مبنای صورتحساب است.
- GPT Image: هرچه اندازه و کیفیت بالاتر، توکن خروجی بیشتر؛ پس
qualityرا به اندازهٔ کاری که دارید بگذارید. - Nano Banana: توکنهای تصویر خروجی را گوگل گزارش میکند و با وضوح بالا میرود. تعداد تقریبی توکن خروجی هر تصویر در هر وضوح، در
capabilities.image_tokensهمان مدل آمده است (GET /models). - مدلهای بهازای هر تصویر:
per_imageقیمت پایهترین اندازهٔ مدل است و اندازهٔ بزرگتر گرانتر حساب میشود. - پیش از درخواست، مبلغی بر اساس
nو گرانترین اندازهٔ همان مدل رزرو میشود (نسبتش درcapabilities.flat_image_multiplier)؛ بعد از پاسخ با هزینهٔ واقعی تسویه و باقی همان لحظه آزاد میشود. پس اعتبارتان باید دستکم به اندازهٔ همین رزرو باشد. - اگر ارائهدهنده usage گزارش نکند، برای هر تصویر حدود ۴٬۲۰۰ توکن خروجی فرض میشود.
نرخ توکن هر مدل به تومان و دلار در صفحهٔ مدلها آمده است.
نکات
- خروجی را همانجا از base64 به فایل تبدیل و در فضای خودتان ذخیره کنید؛ درگاه تصویر را نگه نمیدارد.
- endpointهای جداگانهٔ
/images/editsو/images/variationsپشتیبانی نمیشوند. برای ویرایش یک عکس، آن را با فیلدimageبه یکی از مدلهای Nano Banana بفرستید، یا باinput_referencesبه یکی از مدلهای OpenRouter که تصویر ورودی میپذیرد. - برای ورودی تصویر (خواندن یک عکس بهجای ساختن آن) سراغ Chat Completions و مدلهای دارای قابلیت
visionبروید.