AI Image Creator
centminmod/my-claude-code-setup
Generate, edit-from-reference, or analyze images with AI via OpenRouter (Gemini, GPT Image, Seedream, Qwen, MAI, Grok, FLUX.2, Recraft, Muse, Riverflow; Cloudflare AI Gateway BYOK).
Generate images with Venice. An agent skill from veniceai/skills.
$ npx skills add veniceai/skills --skill venice-image-generate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install veniceai/skills venice-image-generate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/venice-image-generate .claude/skills/venice-image-generate && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .claude/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/veniceai/skills/tree/main/skills/venice-image-generateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add veniceai/skills --skill venice-image-generate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install veniceai/skills venice-image-generate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/venice-image-generate .agents/skills/venice-image-generate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .agents/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add veniceai/skills --skill venice-image-generate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install veniceai/skills venice-image-generate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/venice-image-generate .cursor/skills/venice-image-generate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .cursor/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/veniceai/skills.git --path skills/venice-image-generate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add veniceai/skills --skill venice-image-generate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install veniceai/skills venice-image-generate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/venice-image-generate .gemini/skills/venice-image-generate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .gemini/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install veniceai/skills venice-image-generateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add veniceai/skills --skill venice-image-generate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/venice-image-generate .github/skills/venice-image-generate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .github/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add veniceai/skills --skill venice-image-generate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install veniceai/skills venice-image-generate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/venice-image-generate .opencode/skills/venice-image-generate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "venice-image-generate" agent skill from https://github.com/veniceai/skills/tree/main/skills/venice-image-generate into .opencode/skills/venice-image-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "venice-image-generate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
venice-image-generateGenerate images with Venice. An agent skill from veniceai/skills.
Venice Image Generate is an agent skill from veniceai/skills. Generate images with Venice. Covers POST /image/generate (Venice-native), POST /images/generations (OpenAI-compatible), GET /image/styles (style presets), request fields (prompt, width/height, aspectratio, resolution, quality, cfgscale, steps, seed, variants, stylepreset, stylereferences, enhanceprompt, safemode, hidewatermark, format, returnbinary), per-model constraints from GET /models, response formats and headers.
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Image generation, Structured output and tool calling and Human-in-the-loop approvals. It works with OpenAI and Qwen. The repository describes itself as: Agent Skills for the Venice.ai API. One folder per surface area, each with a SKILL.md for agent runtimes (Cursor, Claude, Codex, etc.). The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 5eaeac5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.venice.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
VENICE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Venice Image Generate loads about 4.7k tokens when it runs. Until then it costs about 113 tokens; SKILL.md has 1,794 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from veniceai/skills at commit 5eaeac5, republished under its MIT licence (© veniceai). 1,794 words, ~4,665 tokens.
.claude/skills/venice-image-generate/SKILL.md (or your agent's skills folder).Two text-to-image endpoints:
POST /api/v1/image/generate — Venice-native, full control (negative prompts, CFG, seed, style presets/references, quality, up to 4 variants).POST /api/v1/images/generations — OpenAI-compatible, fewer knobs but drop-in for the OpenAI SDK.Plus:
GET /api/v1/image/styles — list of style preset names for style_preset. No auth required.For editing / upscaling / multi-image / background removal, see venice-image-edit.
images.generate and want a zero-change SDK swap.style_references)./image/generate — Venice-nativecurl https://api.venice.ai/api/v1/image/generate \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "z-image-turbo",
"prompt": "A beautiful sunset over a mountain range",
"width": 1024,
"height": 1024,
"cfg_scale": 7.5,
"seed": 123456789,
"variants": 1,
"format": "webp",
"style_preset": "3D Model",
"safe_mode": true
}'The request schema is strict: unknown fields are rejected with 400.
| Field | Type | Default | Notes |
|---|---|---|---|
model | string | — | Required. Image model ID from GET /models?type=image. Unknown IDs return 404 (with a suggestion); retired IDs return 404 naming the replacement when one exists. |
prompt | string | — | Required. Non-blank. Max constraints.promptCharacterLimit for the model (1,500 – 32,768 today). |
negative_prompt | string | — | What not to show. Same character cap as prompt. Only used by some models today (e.g. venice-sd35, lustify-*, wai-Illustrious, qwen-image-2, qwen-image-2-pro, qwen-image-3, qwen-image-3-pro, wan-2-7-*). Silently dropped everywhere else, including z-image-turbo and chroma. |
width, height | int | 1024, 1024 | ≤ 1280 each. Only used by pixel-sized models (no constraints.aspectRatios). Aspect-ratio models ignore them, and qwen-image, qwen-image-3, qwen-image-3-pro reject them with 400 — use aspect_ratio. |
aspect_ratio | string | model default | E.g. "1:1", "16:9", "4:3". Send only values from the model's constraints.aspectRatios. /image/generate doesn't validate this field: most models fall back to defaultAspectRatio, but some pass it upstream and fail. |
resolution | string | model default | "1K", "2K", "4K". Must be in the model's constraints.resolutions (otherwise 400). Silently dropped for models with no resolutions. |
quality | "low"/"medium"/"high" | model default | Only for models with constraints.qualities (GPT Image 2 / 2.5, Ideogram V4.5, Grok Imagine 2.0). A value outside that list is 400; ignored on other models. Changes the price — see pricing.quality. |
cfg_scale | number | model default | 0 < x ≤ 20. Higher = more prompt adherence. |
steps | int | min(steps.max, 20) | Only used by models that take steps (today venice-sd35, lustify-*, wai-Illustrious); on those it is 1..constraints.steps.max and above max is 400. Every other model, including z-image-turbo and chroma, accepts any integer and ignores it. |
seed | int | random | -999999999..999999999. Omit for a random seed (0 is a literal seed, not "random"). Some models ignore it (e.g. GPT Image, Muse, Luma, Recraft, ImagineArt, Seedream V5 Pro, Nano Banana Pro, Grok Imagine). |
variants | int | 1 | 1–4. Only with return_binary: false. Only the first image uses your seed; the others get random seeds. Each variant is billed and rate-limited as one image. |
style_preset | string | — | Exact value from GET /image/styles; anything else is 400. |
style_references | array | — | Reference images that guide the aesthetic. Each item: { "image": <raw base64, data URI, or http(s) URL; < 8 MB; not SVG>, "strength": 0.1–1 (default 0.5) }. Only on models with supportsStyleReferences: true, max constraints.maxStyleReferences entries; otherwise 400. strength is ignored when constraints.supportsStyleReferenceStrength is false. |
lora_strength | int | — | 0–100. Only applies to models that use LoRAs. |
enhance_prompt | bool | false | Rewrites the prompt to add visual detail before generating. Adds up to ~30 s and a $0.04 charge when a rewrite is produced (fails open to your original prompt). The final prompt comes back URL-encoded in the x-venice-enhanced-prompt response header. |
disable_prompt_optimization_thinking | bool | model default | Skip the model's prompt-optimization thinking step for speed. Only honored by models with supportsOptimizePromptThinking: true (e.g. seedream-v5-pro, qwen-image-3). |
enable_web_search | bool | false | Only for models with supportsWebSearch: true (currently nano-banana-2, nano-banana-pro); ignored elsewhere. The spec warns that search can cost extra, but today the per-image charge is the same with or without it. |
format | "webp"/"png"/"jpeg" | webp | Output image format. |
return_binary | bool | false | true → raw image bytes; false → JSON with base64. |
embed_exif_metadata | bool | false | Embed prompt info in EXIF. |
hide_watermark | bool | false | Only matters on Venice's flat-priced models (z-image-turbo, venice-sd35, chroma, lustify-*, wai-Illustrious). All other models are never watermarked. Images classified as adult content and very small images are never watermarked either. |
safe_mode | bool | true | Blurs images classified as adult content. |
anon_user_id | string | — | Optional end-user identifier (printable ASCII, ≤ 128 chars, no ||) forwarded for upstream attribution. |
inpaint | — | — | Removed (disabled May 19 2025). Sending it is a 400. Use /image/edit. |
return_binary: false){
"id": "...",
"images": ["<base64>", "<base64>"],
"timing": { "inferenceDuration": 0, "inferencePreprocessingTime": 0, "inferenceQueueTime": 0, "total": 0 },
"request": { "success": true, "data": { "...": "the parsed request with defaults filled in (style_references omitted)" } }
}Send Accept-Encoding: gzip, br to get the JSON compressed.
With return_binary: true, the body is the raw image; Content-Type is detected from the bytes (image/webp, image/png, or image/jpeg).
| Header | Meaning |
|---|---|
x-venice-is-content-violation | "true" if the image was blocked. The call still returns 200: JSON images are blacked out; binary returns a PNG placeholder. You are not charged. |
x-venice-is-blurred | "true" if safe_mode blurred the output. |
x-venice-enhanced-prompt | URL-encoded rewritten prompt (only when enhance_prompt produced one). |
x-venice-model-deprecation-warning, x-venice-model-deprecation-date, x-venice-deprecated, x-venice-deprecated-replacement | Present when the model is scheduled for or already in deprecation. |
x-ratelimit-{limit,remaining,reset}-*, x-venice-balance-usd, x-venice-balance-diem | Rate-limit and balance state, set before the image is generated. |
X-Balance-Remaining | Listed in the spec for x402 callers but not currently set by the server — poll GET /x402/balance/{walletAddress} instead. |
/images/generations — OpenAI-compatibleUse this if you're already on the OpenAI SDK. Field names match openai.images.generate().
import OpenAI from 'openai'
const client = new OpenAI({
apiKey: process.env.VENICE_API_KEY,
baseURL: 'https://api.venice.ai/api/v1',
})
const res = await client.images.generate({
model: 'z-image-turbo',
prompt: 'A beautiful sunset over mountain ranges',
size: '1024x1024',
response_format: 'b64_json',
})
const b64 = res.data[0].b64_json| Field | Values | Notes |
|---|---|---|
model | string | Required in practice: omitting it (or sending "") returns 400 "model is required", even though the spec lists a "default" default. Unknown IDs (e.g. dall-e-3) silently fall back to Venice's default image model (z-image-turbo). |
prompt | string, 1–1500 chars | Required. 1500 is the cap here regardless of model. |
size | auto (default → 1024×1024), 256x256, 512x512, 1024x1024, 1536x1024, 1024x1536, 1792x1024, 1024x1792 | Mapped to width/height, so it only affects pixel-sized models; aspect-ratio models use their default aspect ratio. |
output_format | jpeg / png / webp | Defaults to png. |
response_format | b64_json (default) / url | url returns a data: URL (not a hosted URL). |
moderation | auto (default, safe mode on) / low (safe mode off) | — |
n | 1 | Only one image per call. |
anon_user_id | string | Same as on /image/generate. |
quality, style, background, output_compression, user | — | Accepted for OpenAI compatibility and ignored, but values must still be valid (quality: auto/high/medium/low/hd/standard; style: vivid/natural; background: transparent/opaque/auto; output_compression: 0–100). user is not used for inference and is not an alias of anon_user_id, but it does split the error budget per value (see venice-errors). |
Response: { "created": <unix>, "data": [{ "b64_json": "..." }] } (or [{ "url": "data:image/png;base64,..." }]). Images from this endpoint are never watermarked. Unknown fields are rejected with 400.
If you need variants, seed, negative_prompt, cfg_scale, aspect_ratio, resolution, quality, style_preset, or style_references, switch to /image/generate.
/image/styles — list presetscurl https://api.venice.ai/api/v1/image/stylesNo API key needed. Returns a list of strings:
{ "object": "list", "data": ["3D Model", "Analog Film", "Anime", "Cinematic", "Comic Book", "..."] }Pass any data[] entry verbatim as style_preset (it is case-sensitive). Cache it; the list rarely changes.
curl "https://api.venice.ai/api/v1/models?type=image"Inspect each model's model_spec:
constraints.promptCharacterLimit — max prompt length (also applies to negative_prompt).constraints.aspectRatios[] + defaultAspectRatio — present on aspect-ratio-driven models; use aspect_ratio instead of width/height.constraints.resolutions[] + defaultResolution — present when the model accepts resolution.constraints.qualities[] + defaultQuality — present when the model accepts quality.constraints.steps.{default,max} — step bounds. Every model lists them, but only a few use steps (see the field table).constraints.widthHeightDivisor — pixel-sized models work best with width/height as multiples of this (8 or 16). The API does not validate it.supportsStyleReferences, constraints.maxStyleReferences, constraints.supportsStyleReferenceStrength — style-reference support.supportsWebSearch, supportsOptimizePromptThinking — whether those request flags do anything.privacy (private / anonymized) and uncensored — privacy tier and content posture.pricing.generation.usd (flat per image), or pricing.resolutions[tier].usd for resolution-tiered models, plus pricing.quality[tier][level].usd for quality-tiered models.Representative IDs (verify with GET /models?type=image — the list changes often):
| Sizing idiom | Examples |
|---|---|
width/height | z-image-turbo (default model), venice-sd35, chroma, lustify-v8 |
aspect_ratio only | flux-2-pro, seedream-v5-lite, muse-image, qwen-image-2, krea-v2-large |
aspect_ratio + resolution | nano-banana-2, nano-banana-pro, seedream-v5-pro, qwen-image-3 |
aspect_ratio + resolution + quality | gpt-image-2, gpt-image-2-5-flare, gpt-image-2-5-sunburst, ideogram-v4-5 (1K / 2K), grok-imagine-image-2-0 (low/medium only) |
bria-bg-remover also appears under type=image, but it is the background-removal model. Use it through /image/background-remove, not /image/generate.
{"model": "z-image-turbo", "prompt": "...", "seed": 42}On models that honor seed (e.g. z-image-turbo, seedream-v4, nano-banana-2), the same model + prompt + seed + settings should reproduce the same image, though third-party models don't guarantee bit-identical output. With variants > 1, only the first image uses seed; the rest are random, so run separate calls with different seeds if you need each one reproducible.
{"model": "nano-banana-2", "prompt": "...", "aspect_ratio": "16:9", "resolution": "2K"}{"model": "seedream-v5-pro", "prompt": "...", "aspect_ratio": "4:3", "resolution": "2K"}{"model": "gpt-image-2-5-flare", "prompt": "...", "aspect_ratio": "3:2", "resolution": "2K", "quality": "medium"}Omitting quality uses defaultQuality (high for the GPT Image and Ideogram V4.5 models). The price depends on both resolution and quality.
Use a model that honors negative_prompt (see the field table); z-image-turbo silently drops it.
{
"model": "venice-sd35",
"prompt": "a red sports car in a parking lot",
"negative_prompt": "blurry, people, clouds",
"style_preset": "3D Model"
}{
"model": "krea-v2-large",
"prompt": "a lighthouse on a rocky coast at dusk",
"style_references": [
{ "image": "https://example.com/ref-1.png", "strength": 0.8 },
{ "image": "data:image/png;base64,....", "strength": 0.4 }
]
}Describe the subject in the prompt; the references carry the style. Today the supporting models are krea-v2-large / krea-v2-medium (up to 3 refs, strength honored) and luma-uni-1 / luma-uni-1-max (up to 3 refs, strength ignored). All four are anonymized models. Re-check supportsStyleReferences via GET /models?type=image. The Krea V2 models add a small per-request surcharge when references are used; it isn't itemized in the /models pricing.
const res = await fetch('https://api.venice.ai/api/v1/image/generate', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'z-image-turbo', prompt: '...', return_binary: true }),
})
if (!res.ok) throw new Error(await res.text())
if (res.headers.get('x-venice-is-content-violation') === 'true') throw new Error('Content violation')
const ext = (res.headers.get('content-type') ?? 'image/webp').split('/')[1]
const buf = Buffer.from(await res.arrayBuffer())
await fs.writeFile(`out.${ext}`, buf)| Code | Meaning |
|---|---|
400 | Bad params: missing model, schema violation, unknown field, prompt too long, steps above max (on models that use steps), invalid style_preset, unsupported resolution/quality for the model, width/height sent to qwen-image/qwen-image-3/qwen-image-3-pro, variants with return_binary: true, style_references on an unsupported model or over the cap, unreachable/corrupt reference image. |
401 | Auth failed. |
402 | No credentials at all (x402 payment-requirements body + PAYMENT-REQUIRED header), insufficient balance (Bearer: "Insufficient USD or Diem balance…"; x402 wallet: PAYMENT_REQUIRED body + header), or the API key's USD/DIEM spend limit is reached. |
403 | The API key's modelPrivacy setting blocks this model (e.g. a PRIVATE_ONLY key calling an anonymized model), or the model is unavailable in your region or restricted for your account. |
404 | Model not found or retired (message names the replacement when there is one). On /images/generations, unknown IDs fall back to the default model instead. |
422 | Reference image too large in pixels (over 7680×4320). |
429 | Rate limited, or the upstream provider is overloaded (Retry-After is set). |
500 | Inference failed. |
503 | Model at capacity or offline. Retry with jitter. |
Content-policy violations are not an error on these endpoints. You get 200 with x-venice-is-content-violation: true and a blocked image, and no charge. See venice-errors for body shapes and retry strategy.
width/height, or aspect_ratio (+ resolution). Read constraints first. Sending width/height to an aspect-ratio model is silently ignored, except on qwen-image, qwen-image-3, and qwen-image-3-pro, where it is a 400.aspect_ratio isn't validated on /image/generate, so a value the model doesn't list usually falls back to its default without an error. A resolution or quality the model doesn't list is a 400.variants > 1 requires return_binary: false.format and EXIF isn't embedded. Trust Content-Type, or sniff the bytes.x-venice-is-content-violation. A blocked image still arrives as a 200.style_references on a model without supportsStyleReferences: true is a 400, not a silent no-op.enhance_prompt bills $0.04 each time it produces a rewrite. Leave it off for cost- or latency-sensitive calls.response_format: "url" returns a data URL, not a hosted URL. Plan for that if you're saving to storage.© veniceai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/venice-image-generate of veniceai/skills.
Open the folder on GitHubat commit 5eaeac5
Venice Image Generate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Venice Image Generate this skillveniceai/skills | 144 | — | ~4.7k | Automated safety check: Pass | MIT | |
| AI Image Creatorcentminmod/my-claude-code-setup | 2.7k | — | ~8.1k | Automated safety check: Notes | MIT | |
| Character Refseternityspring/shuohao-skills | 4.3k | — | ~1.7k | Automated safety check: Warn | Apache-2.0 | |
| Image Genopen-octo/octo-agent | 125 | — | ~3.1k | Automated safety check: Notes | MIT | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Xsaimoeru-ai/airi | 50k | 1 repos | ~1.3k | Automated safety check: Pass | MIT |
centminmod/my-claude-code-setup
Generate, edit-from-reference, or analyze images with AI via OpenRouter (Gemini, GPT Image, Seedream, Qwen, MAI, Grok, FLUX.2, Recraft, Muse, Riverflow; Cloudflare AI Gateway BYOK).
eternityspring/shuohao-skills
给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文): 一段话描述角色,拆成分层字段、补全后确认, 先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点, 按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。
open-octo/octo-agent
Acquire images as files — generate them with an AI image model (14 providers: OpenAI/gpt-image, Gemini, Qwen, Zhipu, Volcengine, Stability, FLUX, Ideogram, MiniMax, and more), search openly-licensed…
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
moeru-ai/airi
A skill your agent uses when the user is building with xsai or any @xsai/ package, or is evaluating xsAI for a small OpenAI-compatible workflow with text generation, streaming, tool calling…
QianWen-AI/qianwen-ai
Generate text, have conversations, write code, reason, and call functions with Qwen models.
veniceai/skills
Picks which Venice text model to call for a prompt based on privacy tier, input modality, capabilities and cost, and decides when to escalate from a local agent.
veniceai/skills
Documents Venice's model discovery endpoints, GET /models, /models/traits and /models/compatibility_mapping, so an agent can pick a model by capability, constraint or price.
veniceai/skills
Manages Venice API keys through the /api_keys endpoints: create, list, update and revoke keys, set spending limits, and read rate limits.
veniceai/skills
High-level map of the Venice.ai API: base URL, auth modes per endpoint, endpoint categories, response headers, pricing model, error shape and versioning.
veniceai/skills
Async music, sound-effect and long-form voice generation via Venice.
veniceai/skills
Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices.
Categories
Generate images with Venice. An agent skill from veniceai/skills. Venice Image Generate is an agent skill from veniceai/skills. Generate images with Venice.
Venice Image Generate fits situations like: tasks that involve Image generation; tasks that involve Structured output and tool calling; tasks that involve Human-in-the-loop approvals.
Run `npx skills add veniceai/skills --skill venice-image-generate -a claude-code`. Or copy the skill folder (skills/venice-image-generate in veniceai/skills) into .claude/skills/venice-image-generate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add veniceai/skills --skill venice-image-generate -a codex`. Or copy the skill folder (skills/venice-image-generate in veniceai/skills) into .agents/skills/venice-image-generate in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add veniceai/skills --skill venice-image-generate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/venice-image-generate, .gemini/skills/venice-image-generate, .github/skills/venice-image-generate and .opencode/skills/venice-image-generate in your project.
Going by SKILL.md and its folder, Venice Image Generate needs the command-line tools its instructions call (curl) and credentials named VENICE_API_KEY. Our summary lists: A credential in VENICE_API_KEY.
SKILL.md names 1 domain. In commands or code: api.venice.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Venice Image Generate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Venice Image Generate: AI Image Creator (centminmod/my-claude-code-setup, 2.7k stars), Character Refs (eternityspring/shuohao-skills, 4.3k stars), Image Gen (open-octo/octo-agent, 125 stars) and AI Image Generation and Editing (zhayujie/CowAgent, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
veniceai (a GitHub organization) maintains it in veniceai/skills, which has 144 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 5, 2026.
Source: veniceai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.