Image Generation Studio

v1.0.2

Generate or edit images with the image-generation-studio CLI through supported adapters (`gemini`, `openai_images`, `openai_responses`) and user-configured p...

0· 9·0 current·0 all-time
bylimkim@limkim0530

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for limkim0530/image-generation-studio.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Image Generation Studio" (limkim0530/image-generation-studio) from ClawHub.
Skill page: https://clawhub.ai/limkim0530/image-generation-studio
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Canonical install target

openclaw skills install limkim0530/image-generation-studio

ClawHub CLI

Package manager switcher

npx clawhub@latest install image-generation-studio
Security Scan
Capability signals
Requires sensitive credentials
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description match the included script and references: the skill implements adapters for Gemini, OpenAI Images–compatible endpoints, and OpenAI Responses. Declared built-in aliases, adapter behaviors, and required libraries (google-genai, Pillow) are coherent with image generation/editing functionality.
Instruction Scope
SKILL.md limits runtime actions to resolving providers/models, reading/writing the skill-local config.json, calling provider APIs, downloading temporary image URLs, and saving image outputs. Those actions are appropriate for an image-generation CLI. The instructions explicitly avoid inventing credentials and require asking the user for missing fields when updating config.json.
Install Mechanism
No install spec — instruction-only with an included script. That is the lowest-risk pattern for distribution. The script lists reasonable Python deps in its header comment; there is no external arbitrary download or extraction step.
Credentials
Metadata declares no required env vars, but both SKILL.md and the script expect provider-specific environment variables (e.g., GEMINI_API_KEY, XAI_API_KEY, OPENAI_API_KEY) as optional ways to supply credentials. This is expected for API integrations, but the metadata omission is an inconsistency worth noting: the skill will read provider env vars if present even though none are listed as required.
Persistence & Privilege
always is false and the skill is user-invocable only. It may write a local {baseDir}/config.json when the user asks to configure providers; the SKILL.md instructs not to store secrets unless the user accepts. No elevated platform-wide privileges are requested.
Assessment
This skill appears internally consistent with its stated purpose. Before installing or using it, be aware that: (1) it reads and may update a local {baseDir}/config.json (it will write provider entries and aliases when you ask it to configure providers); (2) it can accept API keys via CLI flags or environment variables such as GEMINI_API_KEY, XAI_API_KEY, OPENAI_API_KEY — do not store secrets in config.json unless you explicitly agree; (3) it will make outbound HTTP requests to the configured API endpoints and may download remote image URLs you supply, so only configure trusted endpoints and avoid passing untrusted URLs; and (4) there is no install/download step from unknown servers, but the included script depends on google-genai and Pillow if you run it locally. If you want tighter guarantees, ask the publisher to add explicit required env var declarations to the registry metadata and audit the complete script (generate.py) for any additional behaviors not covered in the truncated preview.

Like a lobster shell, security has layers — review code before you run it.

latestvk975zhaf3d2qxpqaj6wh5hnc9985kfqt
9downloads
0stars
3versions
Updated 4h ago
v1.0.2
MIT-0

Image Generation (Gemini, OpenAI Images-compatible, OpenAI Responses)

Use this skill by running uv run {baseDir}/scripts/generate.py. Treat {baseDir}/config.json as a local runtime config: it may be empty or omitted in a distributed skill, and users can add their own provider names, API endpoints, default models, and aliases without changing this document.

Model aliases resolve to {provider, model}, and each provider declares an adapter that controls the request format (gemini, openai_images, or openai_responses). Built-in aliases are convenience shortcuts; prefer user-defined aliases from config.json or explicit --provider <name> when the user has a custom provider/proxy. Alias overrides are allowed only when the alias provider and explicit provider use the same adapter.

Model and provider resolution

The script chooses a provider/model at runtime from CLI flags and the user's local config:

  1. -m / --model can be a built-in alias, a user-defined alias from config.json, or a raw model ID.
  2. --provider can force a provider config by name. If both an alias and explicit provider are used, their adapters must be compatible.
  3. When no provider/model is specified, the script uses the runtime config's default_provider and that provider's default_model; if the config is empty, the script falls back to its built-in defaults.

For repeatable results, prefer passing -m <alias> or --provider <name> explicitly instead of relying on implicit defaults.

Quick start by adapter

Use examples by adapter capability, then replace provider/model names with the user's configured names when needed.

# Any adapter: text-to-image with runtime default provider/model resolution
uv run {baseDir}/scripts/generate.py -p "misty mountain at dawn, photorealistic" -f mountain.png

# Gemini adapter: aspect ratio + native 1K/2K/4K image_size
uv run {baseDir}/scripts/generate.py --provider my-gemini-provider -p "cyberpunk street at night" -f neon.png -r 2K --aspect-ratio 16:9

# Gemini adapter: edit / compose with multiple input images
uv run {baseDir}/scripts/generate.py --provider my-gemini-provider -p "place the dog inside the castle courtyard" -f blend.png -i dog.jpg -i castle.jpg

# Gemini adapter on a Nano 2-compatible model: search grounding, thinking, and streaming text
uv run {baseDir}/scripts/generate.py -m my-nano2-alias -p "art nouveau jazz festival poster" -f poster.png --search web --thinking high --stream

# openai_images adapter: text-to-image through /v1/images/generations
uv run {baseDir}/scripts/generate.py --provider my-images-provider -p "futuristic cafe product photo" -f cafe.png --size 1536x1024 --quality high

# openai_images adapter: edit through /v1/images/edits when the provider/model supports it
uv run {baseDir}/scripts/generate.py --provider my-images-provider -p "add neon lights and heavy rain" -f edited.png -i cafe.png --response-format b64_json

# openai_responses adapter: text-to-image through /v1/responses with the image_generation tool
uv run {baseDir}/scripts/generate.py --provider my-responses-provider -p "minimal product photo of a ceramic mug" -f mug.png --aspect-ratio 1:1

# Temporary per-call endpoint/key override, without editing config.json
uv run {baseDir}/scripts/generate.py --provider my-images-provider -p "..." -f out.png --api-url https://provider.example --api-key "$MY_IMAGES_PROVIDER_API_KEY"

Configuration

Credentials are resolved per provider with precedence CLI flag → env var → <skill>/config.json. Prefer environment variables or per-call --api-key for secrets; store api_key in config.json only when the user explicitly accepts local secret storage. Provider names are converted to env var prefixes by uppercasing and replacing - with _: provider my-images-provider reads MY_IMAGES_PROVIDER_API_KEY and MY_IMAGES_PROVIDER_API_URL. Built-in provider names follow the same pattern, e.g. geminiGEMINI_API_KEY / GEMINI_API_URL.

Providers own credentials and default models; their adapter controls the request format. Model aliases are optional shortcuts to {provider, model}. Raw model IDs infer a known built-in provider from the model name when possible, otherwise they use the selected/default provider.

When the user asks to configure providers, models, aliases, API endpoints, API keys, or a blank config.json, read references/configuration.md and convert the user's natural-language description into a {baseDir}/config.json update. Ask only for missing required fields, preserve existing config entries, and do not invent credentials or model IDs.

Minimal config.json

The file lives at {baseDir}/config.json. It may be empty, omitted, or as small as one provider plus one alias:

{
  "default_provider": "my-images-provider",
  "providers": {
    "my-images-provider": {
      "adapter": "openai_images",
      "api_url": "https://provider.example",
      "default_model": "image-model-id"
    }
  },
  "models": {
    "fast-image": {
      "provider": "my-images-provider",
      "model": "image-model-id"
    }
  }
}

Persistent system_prompt entries in config.json are intentionally ignored because they can become hidden global instructions for future calls. Use --system-prompt / --system only for instructions that should apply to the current invocation. Gemini sends the per-call value as native system_instruction; openai_images and openai_responses prepend it to the user prompt with a blank line separator.

Supported adapters:

AdapterRequest formatUse whenDetails
geminiGoogle GenAI models.generate_content / generate_content_stream with native system_instructionProvider exposes Gemini image models through the Google GenAI API shapereferences/adapter-gemini.md
openai_imagesOpenAI Images-compatible /v1/images/generations JSON and /v1/images/edits multipart requestsProvider/proxy exposes OpenAI Images-style generation or edit endpointsreferences/adapter-openai-images.md
openai_responsesOpenAI Responses API /v1/responses with the image_generation toolProvider/proxy exposes Responses API image generation and the selected model supports the image_generation toolreferences/adapter-openai-responses.md

Before choosing flags:

NeedUseAvoid
Input-image edit or compositiongemini for multi-image composition, or openai_images when the provider/model supports editsopenai_responses with -i
Shape control on openai_images--size--aspect-ratio
Shape control on gemini or openai_responses-r / --resolution and optional --aspect-ratioOpenAI Images-only fields unless the adapter reference says they are sent
Search, thinking, or streamingGemini Nano 2 / Gemini streaming rules in references/adapter-gemini.mdAny OpenAI-compatible adapter

After resolving or choosing an adapter, read the matching adapter reference before recommending adapter-specific flags, debugging provider errors, or deciding whether image editing/composition is supported.

config.json contains secrets if api_key is stored there. Do not distribute real local config files; ship an empty or sanitized config, or rely on env vars / CLI flags. Do not accept or persist system_prompt values from untrusted sources; the CLI ignores persisted system_prompt and only honors per-call --system-prompt.

Common options

These options are shared by the CLI, though adapter references define which ones are actually sent to each provider:

  • --provider — provider config name, or auto (default). Auto first uses model aliases, then raw model-name inference, then default_provider, then the script's built-in fallback. Explicit providers can override aliases only when their adapters are compatible.
  • -m / --model — alias from config models, a built-in alias, or a raw model ID.
  • -p / --prompt — prompt or edit instructions (required).
  • -f / --filename — output path (required). Parent directories are created automatically. Extension picks the final saved format: .png, .jpg, .jpeg, .webp; unknown extensions save as PNG. All adapters save through Pillow, so provider bytes may be re-encoded to match the extension.
  • --api-key / --api-url — temporary per-call credential or endpoint override.
  • --system-prompt / --system — per-call style/instruction prefix. Gemini sends it natively; OpenAI-compatible adapters prepend it to the prompt.

Adapter-specific options

Read only the relevant reference once the adapter is known:

  • references/adapter-gemini.md — Gemini image generation, image editing/composition with up to 14 inputs, 1K/2K/4K native image size, aspect ratio, Nano 2 search/thinking, and streaming behavior.
  • references/adapter-openai-images.md — OpenAI Images-compatible generation and edits, size, quality, output_format, output_compression, moderation, response_format, URL download behavior, and provider-dependent edit support.
  • references/adapter-openai-responses.md — OpenAI Responses /v1/responses image generation tool, resolution/aspect-ratio mapping, response image extraction, and current lack of input-image editing.

Notes

  • Prefer timestamped filenames to avoid clobbering: 2026-04-18-<name>.png.
  • On failure the script prints the raw provider error and exits non-zero — read it before retrying.
  • Don't read the output image back into your context unless the user asks — just report the saved path.
  • Some providers add watermark or provenance metadata to generated images.

Comments

Loading comments...