Academy → Hermes FeaturesOfficial documentation · Arabic guidance

Image Generation

توليد الصور

Intermediate8 min readLesson 134 questions✓ 2026-08-18
Before you read

What this page is, and what it holds.

This page covers Image Generation. You will use hermes tools here; about 8 minutes to read. Never put a key in a chat or in a config file you share. Use environment variables or a secret manager.

10sections
9code examples
6tables
1commands
1,332source words
The official one-line description

Generate images via FAL.ai — 11 models including FLUX 2, GPT Image (1.5 & 2), Nano Banana Pro, Ideogram, Recraft V4 Pro, Krea 2, and more, selectable via hermes tools.

What you will be able to do

Outcomes taken from this page, not a template.

  • Understand what الأسرار والمفاتيح is and when you need it.
  • Run hermes tools and understand what happens next.
  • Read the table and take only the row that applies to you.
  • Set FAL_KEY in the right place.
Identifiers you will meet

Exactly as they appear in Hermes.

Commands
  • hermes tools
Environment variables
  • FAL_KEY
  • FAL_IMAGE_MODEL
  • IMAGE_TOOLS_DEBUG
  • OPENAI_API_KEY
  • KREA_API_KEY
Page map

Jump to the part you need.

  1. 01Supported Models
  2. 02Setup
  3. 03Usage
  4. 04Image-to-Image / Editing
  5. 05Aspect Ratios
  6. 06Upscaling
  7. 07How It Works Internally
  8. 08Debugging
  9. 09Platform Delivery
  10. 10Limitations
The full official page

Nothing summarised away.

The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.

Hermes Agent generates images from text prompts via FAL.ai. Eleven models are supported out of the box, each with different speed, quality, and cost tradeoffs. The active model is user-configurable via hermes tools and persists in config.yaml.

Supported Models

A lookup table. Do not read it all; find the row that applies to you.

ModelSpeedStrengthsPrice
fal-ai/flux-2/klein/9b (default)<1sFast, crisp text$0.006/MP
fal-ai/flux-2-pro~6sStudio photorealism$0.03/MP
fal-ai/z-image/turbo~2sBilingual EN/CN, 6B params$0.005/MP
fal-ai/nano-banana-pro~8sGemini 3 Pro, reasoning depth, text rendering$0.15/image (1K)
fal-ai/gpt-image-1.5~15sPrompt adherence$0.034/image
fal-ai/gpt-image-2~20sSOTA text rendering + CJK, world-aware photorealism$0.04–0.06/image
fal-ai/ideogram/v3~5sBest typography$0.03–0.09/image
fal-ai/recraft/v4/pro/text-to-image~8sDesign, brand systems, production-ready$0.25/image
fal-ai/qwen-image~12sLLM-based, complex text$0.02/MP
fal-ai/krea/v2/medium/text-to-image~15-25sIllustration, anime, painting, expressive/artistic styles$0.030–0.035/image
fal-ai/krea/v2/large/text-to-image~25-60sPhotorealism, raw textured looks (motion blur, grain, film)$0.060–0.065/image

Prices are FAL's pricing at time of writing; check fal.ai ↗ for current numbers.

Setup

Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes tools.

Get a FAL API Key

  1. Sign up at fal.ai ↗
  2. Generate an API key from your dashboard

Configure and Pick a Model

Run the tools command:

Shell1 line
hermes tools

Navigate to 🎨 Image Generation, pick your backend (Nous Subscription or FAL.ai), then the picker shows all supported models in a column-aligned table — arrow keys to navigate, Enter to select:

Text5 lines
  Model                          Speed    Strengths                    Price
  fal-ai/flux-2/klein/9b         <1s      Fast, crisp text             $0.006/MP   ← currently in use
  fal-ai/flux-2-pro              ~6s      Studio photorealism          $0.03/MP
  fal-ai/z-image/turbo           ~2s      Bilingual EN/CN, 6B          $0.005/MP
  ...

Your selection is saved to config.yaml:

YAML4 lines
image_gen:
  model: fal-ai/flux-2/klein/9b
  use_gateway: false            # true if using Nous Subscription
  max_parallel_requests: 4      # concurrent images in one tool-call batch

max_parallel_requests defaults to 4. Hermes clamps it to at least one and to the global tool-worker limit, so image providers receive bounded parallel requests without allowing an image batch to bypass the agent's concurrency cap.

GPT-Image Quality

The fal-ai/gpt-image-1.5 and fal-ai/gpt-image-2 request quality is pinned to medium (~$0.034–$0.06/image at 1024×1024). We don't expose the low / high tiers as a user-facing option so that Nous Portal billing stays predictable across all users — the cost spread between tiers is 3–22×. If you want a cheaper option, pick Klein 9B or Z-Image Turbo; if you want higher quality, use Nano Banana Pro or Recraft V4 Pro.

Usage

Explains the idea itself. Read it slowly; the later sections build on it.

The agent-facing schema is intentionally minimal — the model picks up whatever you've configured:

Text1 line
Generate an image of a serene mountain landscape with cherry blossoms
Text1 line
Create a square portrait of a wise old owl — use the typography model
Text1 line
Make me a futuristic cityscape, landscape orientation

Image-to-Image / Editing

A lookup table. Do not read it all; find the row that applies to you.

The same image_generate tool also edits existing images when the active model supports it — pass a source image and the backend routes to its editing endpoint automatically (mirrors how video_generate handles image-to-video). Omit the source image and it's plain text-to-image.

Text1 line
Take this photo and make it a rainy Tokyo street at night → <image>
Text1 line
Blend these two product shots into one hero image → <image1> <image2>

Two inputs drive the edit:

  • image_url — the primary source image to edit/transform (public URL or local path).
  • reference_image_urls — additional style/composition references (capped per-model).

Which backends support editing

BackendImage-to-imageReference capHow
FAL.ai (edit-capable models below)✓up to 9routes to the model's /edit endpoint
OpenAI (gpt-image-2)✓up to 16images.edit()
xAI (Grok Imagine)✓1/v1/images/edits (grok-imagine-image-quality)
Krea (Krea 2)✓up to 10reference-guided generation (image_style_references)
OpenAI (Codex auth)✓up to 16Codex Responses image_generation tool with input_image content parts

FAL models with an editing endpoint: flux-2/klein/9b, flux-2-pro, nano-banana-pro, gpt-image-1.5, gpt-image-2, ideogram/v3, and qwen-image. Pure text-to-image FAL models (z-image/turbo, recraft, krea/*) reject image inputs with a clear error pointing you at an edit-capable model.

The active model's editing capability is surfaced in the tool description at runtime, so the agent knows whether image_url will be honored before it calls the tool.

Aspect Ratios

Explains the idea itself. Read it slowly; the later sections build on it.

Every model accepts the same three aspect ratios from the agent's perspective. Internally, each model's native size spec is filled in automatically:

Agent inputimage_size (flux/z-image/qwen/recraft/ideogram)aspect_ratio (nano-banana-pro)image_size (gpt-image-1.5)image_size (gpt-image-2)
landscapelandscape_16_916:91536x1024landscape_4_3 (1024×768)
squaresquare_hd1:11024x1024square_hd (1024×1024)
portraitportrait_16_99:161024x1536portrait_4_3 (768×1024)

GPT Image 2 maps to 4:3 presets rather than 16:9 because its minimum pixel count is 655,360 — the landscape_16_9 preset (1024×576 = 589,824) would be rejected.

This translation happens in _build_fal_payload() — agent code never has to know about per-model schema differences.

Upscaling

Explains the idea itself. Read it slowly; the later sections build on it.

Opt-in only

No model upscales by default. Modern image models emit their best quality natively, and the available upscalers are creative enhancers (diffusion passes) that can subtly redraw content — degrading rendered text, faces, and fine detail. Upscaling only runs when the agent explicitly requests it.

The upscale parameter (per-call opt-in)

  • upscale: true — chain a high-resolution pass after generation:
BackendUpscaler
FAL.aiClarity Upscaler (2×, +$0.03/MP)
KreaKrea Enhance (2×, up to 8K ceiling)
Other backendsno upscaler; native resolution returned
  • upscale: false / omitted — native resolution (the default)

video_generate also accepts upscale: true on the FAL backend, chaining ByteDance's SeedVR2 video upscaler (2×, $0.001/MP of output video) after generation.

When the FAL image pass runs, it uses these settings:

SettingValue
Upscale factor2×
Creativity0.35
Resemblance0.6
Guidance scale4
Inference steps18

If upscaling fails (network issue, rate limit), the original image is returned automatically. The response reports upscaled: true/false so the agent knows which resolution it got.

How It Works Internally

Settings you configure once. Change one at a time so you can see what each does. Set FAL_IMAGE_MODEL in your environment, not in the chat.

  1. Model resolution — _resolve_fal_model() reads image_gen.model from config.yaml, falls back to the FAL_IMAGE_MODEL env var, then to fal-ai/flux-2/klein/9b.
  2. Payload building — _build_fal_payload() translates your aspect_ratio into the model's native format (preset enum, aspect-ratio enum, or GPT literal), merges the model's default params, applies any caller overrides, then filters to the model's supports whitelist so unsupported keys are never sent.
  3. Submission — _submit_fal_request() routes via direct FAL credentials or the managed Nous gateway.
  4. Upscaling — runs only when the agent passed upscale: true; every model's catalog default is off.
  5. Delivery — final image URL returned to the agent, which emits a MEDIA:<url> tag that platform adapters convert to native media.

Debugging

A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.

Enable debug logging:

Shell1 line
export IMAGE_TOOLS_DEBUG=true

Debug logs go to ./logs/image_tools_debug_<session_id>.json with per-call details (model, parameters, timing, errors).

Platform Delivery

A lookup table. Do not read it all; find the row that applies to you.

PlatformDelivery
CLIImage URL printed as markdown ![](https://hermes-agent.nousresearch.com/docs/url) — click to open
TelegramPhoto message with the prompt as caption
DiscordEmbedded in a message
SlackURL unfurled by Slack
WhatsAppMedia message
OthersURL in plain text

Limitations

Settings you configure once. Change one at a time so you can see what each does. Set FAL_KEY, OPENAI_API_KEY in your environment, not in the chat.

  • Requires credentials for the active backend (FAL FAL_KEY / Nous Subscription, OPENAI_API_KEY, xAI OAuth, KREA_API_KEY)
  • Editing is model-dependent — image-to-image works only on edit-capable models (see the table above); text-to-image-only models reject image inputs with a clear error
  • Temporary URLs — backends return hosted URLs that expire after hours/days; Hermes materializes them to the local cache so delivery still works after expiry
  • Per-model constraints — some models don't support seed, num_inference_steps, etc. The supports / edit_supports filter silently drops unsupported params; this is expected behavior
Knowledge check

4 questions answered by this page alone.

Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.

1. In this lesson's table, what is the “Speed” for “fal-ai/qwen-image”?
2. Which of these environment variables actually appears in this lesson?
3. Which of these headings does not appear in this lesson?
4. Which configuration key appears in this lesson's examples?