venice--venice-image-generate
Generate images with Venice. Covers POST /image/generate (Venice-native), POST /images/generations (OpenAI-compatible), GET /image/styles (style presets), request fields (prompt, dimensions, cfg_scale, seed, variants, style_preset, aspect_ratio, resolution, safe_mode, watermark), and response format
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 13
- Forks
- 1
01 前言 Front Matter
- name
- venice--venice-image-generate
- origin
- github.com/veniceai/skills (skill: venice-image-generate)
- license
- MIT
- version
- 1.0.0
- description
- Generate images with Venice. Covers POST /image/generate (Venice-native), POST /images/generations (OpenAI-compatible), GET /image/styles (style presets), request fields (prompt, dimensions, cfg_scale, seed, variants, style_preset, aspect_ratio, resolution, safe_mode, watermark), and response format
- compatibility
- yana-ai >= 0.14.0
03 SKILL.md 正文
Venice Image Generation
Two text-to-image endpoints:
POST /api/v1/image/generate— Venice-native, full control (negative prompts, CFG, seed, 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 forstyle_preset.
For editing / upscaling / multi-image / background removal, see venice-image-edit.
Use when
- You need to generate images from text prompts.
- You need multiple variants in one call.
- You're porting from OpenAI's
images.generateand want a zero-change SDK swap. - You want to browse style presets before committing to one.
/image/generate — Venice-native
Request
curl 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,
"steps": 8,
"seed": 123456789,
"variants": 1,
"format": "webp",
"style_preset": "3D Model",
"safe_mode": true
}'
Fields
| Field | Type | Default | Notes |
|---|---|---|---|
model |
string | — | Required. Image model ID. GET /models?type=image. |
prompt |
string | — | Required. Max promptCharacterLimit from the model's model_spec.constraints (typically 1500–7500). |
negative_prompt |
string | — | Describe what not to show. Same character cap as prompt. |
width, height |
int | 1024, 1024 | ≤ 1280 each. Must be divisible by constraints.widthHeightDivisor on the model's model_spec. |
aspect_ratio |
string | — | "1:1", "16:9", "9:16", … — used by models like Nano Banana instead of width/height. |
resolution |
string | — | "1K", "2K", "4K" — used by resolution-driven models. |
cfg_scale |
number | model default | 0 < x ≤ 20. Higher = more prompt adherence. |
steps |
int | 8 | Inference steps. Some models ignore it (e.g. Turbo). |
seed |
int | 0 | -999999999..999999999. Use 0/omit for random. |
variants |
int | 1 | 1–4. Only if return_binary: false. |
lora_strength |
int | — | 0–100 when model uses Loras. |
style_preset |
string | — | Value from GET /image/styles. |
format |
"webp"/"png"/"jpeg" |
webp |
Response image format. |
return_binary |
bool | false |
true → binary image/* response; false → JSON with base64. |
embed_exif_metadata |
bool | false |
Embed prompt info in EXIF. |
hide_watermark |
bool | false |
Venice may still watermark certain content. |
safe_mode |
bool | true |
Blurs adult content. |
enable_web_search |
bool | false |
Only some models. Charges extra. |
inpaint |
— | — | Deprecated since May 19 2025. A new inpaint API is forthcoming. |
Response (JSON, return_binary: false)
{
"id": "...",
"images": ["<base64>", "<base64>"],
"timing": {...},
"request": {...}
}
With return_binary: true, response is raw image/webp (or png/jpeg) with matching Content-Type.
/images/generations — OpenAI-compatible
Use 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
Mapped fields
| Field | Values | Notes |
|---|---|---|
model |
string, default "default" |
Unknown model IDs fall back to Venice's default. |
prompt |
string, ≤ 1500 chars | Required. |
size |
auto, 256x256, 512x512, 1024x1024, 1536x1024, 1024x1536, 1792x1024, 1024x1792 |
— |
output_format |
jpeg / png / webp |
Defaults to png. |
response_format |
b64_json / url |
url returns a data: URL (not a hosted URL). |
moderation |
auto (safe mode on) / low (safe mode off) |
— |
n |
1 |
Venice only supports a single image per call here. |
quality, style (vivid/natural), background, output_compression, user |
— | Accepted for OpenAI compat, not used by Venice. |
If you need variants, seed, negative_prompt, cfg_scale, or style_preset, switch to /image/generate.
/image/styles — list presets
curl https://api.venice.ai/api/v1/image/styles \
-H "Authorization: Bearer $VENICE_API_KEY"
Returns a list of styles[], each with a name you can pass to style_preset. Cache this — it's small and stable.
Choosing a model
curl "https://api.venice.ai/api/v1/models?type=image" \
-H "Authorization: Bearer $VENICE_API_KEY"
Inspect per-model model_spec:
constraints.widthHeightDivisor—widthandheightmust both be divisible by this.constraints.aspectRatios[]+defaultAspectRatio— if present, the model supports aspect-ratio-driven sizing.constraints.resolutions[]+defaultResolution— if present, the model supportsresolution(1K/2K/4K).constraints.steps.{default,max}— step bounds (some models ignorestepsentirely).constraints.promptCharacterLimit— max prompt length (also applies tonegative_prompt).pricing.generation.usd— flat USD per image, orpricing.resolutions[].usdfor resolution-tiered models.
Pick a model that matches the feature + size combo you plan to use.
Common patterns
Fixed-seed A/B test
{"model": "z-image-turbo", "prompt": "...", "seed": 42, "variants": 4}
Aspect-ratio-driven model (Nano Banana family)
{"model": "nano-banana-2", "prompt": "...", "aspect_ratio": "16:9", "resolution": "2K"}
(Other nano-banana variants: nano-banana-pro. Always verify the current ID via GET /models?type=image.)
Style preset + negative
{
"model": "z-image-turbo",
"prompt": "a red sports car in a parking lot",
"negative_prompt": "blurry, people, clouds",
"style_preset": "3D Model"
}
Stream binary to disk (Node)
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())
const buf = Buffer.from(await res.arrayBuffer())
await fs.writeFile('out.webp', buf)
Errors
| Code | Meaning |
|---|---|
400 |
Bad params (e.g. dimensions not divisible by widthHeightDivisor, prompt too long, variants>1 with return_binary). |
401 |
Auth or Pro-only model. |
402 |
Insufficient balance. Bearer: plain { "error": "Insufficient balance" }; x402: PAYMENT_REQUIRED body + PAYMENT-REQUIRED header. |
415 |
Wrong Content-Type (send application/json for this endpoint). |
429 |
Rate limited. |
500 / 503 |
Inference or capacity issue — retry with jitter. |
(Content-policy violations on /image/generate come back as 400 with an error string, not 422 — the 422 shape is specific to audio generation paths.)
Gotchas
- Each model picks one sizing idiom: either
width/height,aspect_ratio+resolution, or (OpenAI-compat)size. Match the model'sconstraints. variants > 1requiresreturn_binary: false(JSON with base64 array).stepsis ignored by fast/turbo models; they hardcode step count internally.hide_watermark: trueis advisory — Venice may still watermark content flagged by safety classifiers.- Old
inpaintfield is deprecated; don't use it. - For OpenAI-compat,
response_format: "url"returns a data URL, not a hosted URL — plan for that if you're saving to storage.
04 同仓库更多 Skills
openai--sentry--sentry
Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.
ito-basket-compare
Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.
implementing-network-traffic-baselining
Build network traffic baselines from NetFlow/IPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly/daily traffic pattern profiling
detecting-evasion-techniques-in-endpoint-logs
Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.
implementing-microsegmentation-with-guardicore
Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.
ramdisk-tmpfs-patterns
暂无简介