{"id":"e3acfa88-4cea-44cb-aebb-d7a1f50170dd","shortId":"rpcRTL","kind":"skill","title":"image-studio","tagline":"Tired of juggling 8 API keys? This skill gives you one-command access to Midjourney, Flux, Ideogram, and more, with zero setup. Use when you want to generate any image without worrying about API keys.","description":"# 🎨 Image Generation Skill\n\n**Use when:** User asks to generate, draw, create, or make any kind of image, photo, illustration, icon, logo, or artwork.\n\nGenerate images with 8 state-of-the-art AI models. This skill automatically picks the best model for the job and handles all the complexity — including Midjourney's async polling — so you can focus on the conversation.\n\n---\n\n## Quick Reference\n\n| User Intent | Model | Speed |\n|---|---|---|\n| Artistic, cinematic, painterly | `midjourney` | ~15s |\n| Photorealistic, portrait, product | `flux-pro` | ~8s |\n| General purpose, balanced | `flux-dev` | ~10s |\n| Quick draft, fast iteration | `flux-schnell` | ~2s |\n| Image with text, logo, poster | `ideogram` | ~10s |\n| Vector art, icon, flat design | `recraft` | ~8s |\n| Anime, stylized illustration | `sdxl` | ~5s |\n| Gemini-powered, consistent style | `nano-banana` | ~12s |\n\n---\n\n## How to Generate an Image\n\n### Step 1 — Enhance the prompt\n\nBefore calling the script, expand the user's prompt with style, lighting, and quality descriptors appropriate for the chosen model.\n\n- **Midjourney**: Add `cinematic lighting`, `ultra detailed`, `--v 7`, `--style raw`\n- **Flux**: Add `masterpiece`, `highly detailed`, `sharp focus`, `professional photography`\n- **Ideogram**: Be explicit about text content, font style, and layout\n- **Recraft**: Specify `vector illustration`, `flat design`, `icon style`\n\n### Step 2 — Run the script\n\n```bash\nnode {baseDir}/tools/generate.js \\\n  --model <model_id> \\\n  --prompt \"<enhanced prompt>\" \\\n  --aspect-ratio <ratio>\n```\n\n**All parameters:**\n\n| Parameter | Default | Description |\n|---|---|---|\n| `--model` | `flux-dev` | Model ID from the table above |\n| `--prompt` | *(required)* | The image generation prompt |\n| `--aspect-ratio` | `1:1` | `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `21:9` |\n| `--num-images` | `1` | Number of images (1–4; Midjourney always returns 4) |\n| `--negative-prompt` | — | Things to avoid (not supported by Midjourney) |\n| `--seed` | — | Seed for reproducibility |\n\n### Step 3 — Return the result\n\nThe script always waits and returns the final image URL(s). No polling required.\n\n```json\n{\n  \"success\": true,\n  \"model\": \"flux-pro\",\n  \"imageUrl\": \"https://...\",\n  \"images\": [\"https://...\"]\n}\n```\n\nSend the `imageUrl` to the user.\n\n---\n\n## Midjourney Actions\n\nAfter generating a 4-image grid with Midjourney, offer the user these options:\n\n```bash\n# Upscale image #2 (subtle, preserves details)\nnode {baseDir}/tools/generate.js \\\n  --model midjourney \\\n  --action upscale \\\n  --index 2 \\\n  --job-id <job_id>\n\n# Create a strong variation of image #3\nnode {baseDir}/tools/generate.js \\\n  --model midjourney \\\n  --action variation \\\n  --index 3 \\\n  --job-id <job_id> \\\n  --variation-type 1\n\n# Regenerate with same prompt\nnode {baseDir}/tools/generate.js \\\n  --model midjourney \\\n  --action reroll \\\n  --job-id <job_id>\n```\n\n**Upscale types:** `0` = Subtle (default, best for photos), `1` = Creative (best for illustrations)\n\n**Variation types:** `0` = Subtle (default), `1` = Strong (dramatic changes)\n\n---\n\n## Example Conversations\n\n**User:** \"帮我画一只在雪山上的雪豹，电影感光效\"\n\n```bash\n# Choose midjourney for artistic quality\nnode {baseDir}/tools/generate.js \\\n  --model midjourney \\\n  --prompt \"a majestic snow leopard on a snowy mountain peak, cinematic lighting, dramatic atmosphere, ultra detailed --ar 16:9 --v 7\" \\\n  --aspect-ratio 16:9\n```\n\n> 🎨 生成完成！想放大哪张？(U1-U4) 还是创建变体？(V1-V4)\n\n---\n\n**User:** \"用 Flux 生成一张香水产品海报，白色背景\"\n\n```bash\n# Choose flux-pro for photorealistic product shots\nnode {baseDir}/tools/generate.js \\\n  --model flux-pro \\\n  --prompt \"a luxury perfume bottle on a clean white background, professional product photography, soft shadows, 8k, highly detailed\" \\\n  --aspect-ratio 3:4\n```\n\n---\n\n**User:** \"快速给我看个草稿\"\n\n```bash\n# flux-schnell for instant previews\nnode {baseDir}/tools/generate.js \\\n  --model flux-schnell \\\n  --prompt \"...\" \\\n  --aspect-ratio 1:1\n```\n\n---\n\n**User:** \"帮我做一个 App 图标，扁平风格，蓝色系\"\n\n```bash\n# recraft for vector/icon style\nnode {baseDir}/tools/generate.js \\\n  --model recraft \\\n  --prompt \"a minimal flat design app icon, blue color scheme, simple geometric shapes, vector style, white background\"\n```\n\n---\n\n## Setup\n\n**Zero API keys needed!** All requests go through a hosted proxy that handles authentication server-side.\n\nThe skill works out of the box — just install and use.\n\n### Advanced: Custom proxy or token\n\nIf you want to use your own proxy or a persistent token, set these environment variables:\n\n```json\n{\n  \"skills\": {\n    \"entries\": {\n      \"image-studio\": {\n        \"enabled\": true,\n        \"env\": {\n          \"IMAGE_STUDIO_PROXY_URL\": \"https://your-proxy.vercel.app\",\n          \"IMAGE_STUDIO_TOKEN\": \"your_token_here\"\n        }\n      }\n    }\n  }\n}\n```\n\n| Variable | Required | Description |\n|---|---|---|\n| `IMAGE_STUDIO_PROXY_URL` | No | Custom proxy base URL (default: `https://image-gen-proxy.vercel.app`) |\n| `IMAGE_STUDIO_TOKEN` | No | Persistent token (auto-obtained if not set, 100 free uses per token) |\n\nTo deploy your own proxy, see the [audiomind proxy](../audiomind/proxy/) as a reference implementation. You'll need `FAL_KEY` and `LEGNEXT_KEY` as Vercel environment variables.\n\n---\n\n## Changelog\n\n### v2.0.0\n- **Simplified async**: The script now blocks until Midjourney completes. No more `--async` / `--poll` flags needed in SKILL.md instructions.\n- **Unified output format**: All models return the same `{ success, imageUrl, images }` shape.\n- **Reference images for Nano Banana**: Pass `--reference-images \"url1,url2\"` for character/style consistency across generations.\n\n### v1.3.0\n- Added non-blocking async mode for Midjourney (`--async` + `--poll`).\n\n### v1.2.0\n- Midjourney turbo mode enabled by default (~10-20s).\n\n### v1.1.0\n- Switched Midjourney provider from TTAPI to Legnext.ai for better stability.\n\n### v1.0.0\n- Initial release with Midjourney, Flux, SDXL, Nano Banana, Ideogram, Recraft.","tags":["image","studio","media","skills","wells1137","agent-skills","agentskills","audio-generation","claude-code","claude-code-marketplace","claude-code-plugin","claude-code-skill"],"capabilities":["skill","source-wells1137","skill-image-studio","topic-agent-skills","topic-agentskills","topic-audio-generation","topic-claude-code","topic-claude-code-marketplace","topic-claude-code-plugin","topic-claude-code-skill","topic-claude-code-skills","topic-claude-skills","topic-content-creation","topic-image-generation","topic-openclaw"],"categories":["media-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/wells1137/media-skills/image-studio","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add wells1137/media-skills","source_repo":"https://github.com/wells1137/media-skills","install_from":"skills.sh"}},"qualityScore":"0.462","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 24 github stars · SKILL.md body (5,924 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T07:01:41.484Z","embedding":null,"createdAt":"2026-04-18T22:23:51.080Z","updatedAt":"2026-05-01T07:01:41.484Z","lastSeenAt":"2026-05-01T07:01:41.484Z","tsv":"'-20':781 '/audiomind/proxy':697 '/tools/generate.js':237,368,387,407,450,504,543,567 '0':417,430 '1':168,267,268,269,270,286,290,400,423,433,552,553 '10':780 '100':683 '10s':125,140 '12s':161 '15s':111 '16':271,274,470,477 '2':230,280,362,374 '21':281 '2s':133 '3':276,277,279,311,384,393,530 '4':275,278,291,295,349,531 '5s':152 '7':199,473 '8':7,66 '8k':524 '8s':118,147 '9':272,273,282,471,478 'access':17 'across':760 'action':345,371,390,410 'ad':763 'add':193,203 'advanc':616 'ai':72 'alway':293,317 'anim':148 'api':8,38,589 'app':556,575 'appropri':187 'ar':469 'art':71,142 'artist':107,446 'artwork':62 'ask':46 'aspect':241,265,475,528,550 'aspect-ratio':240,264,474,527,549 'async':92,717,727,767,771 'atmospher':466 'audiomind':695 'authent':601 'auto':678 'auto-obtain':677 'automat':76 'avoid':301 'background':518,586 'balanc':121 'banana':160,750,802 'base':667 'basedir':236,367,386,406,449,503,542,566 'bash':234,359,442,493,534,560 'best':79,420,425 'better':792 'block':721,766 'blue':577 'bottl':513 'box':611 'call':173 'chang':436 'changelog':714 'character/style':758 'choos':443,494 'chosen':190 'cinemat':108,194,463 'clean':516 'color':578 'command':16 'complet':724 'complex':88 'consist':156,759 'content':216 'convers':100,438 'creat':50,378 'creativ':424 'custom':617,665 'default':246,419,432,669,779 'deploy':689 'descript':247,659 'descriptor':186 'design':145,226,574 'detail':197,206,365,468,526 'dev':124,251 'draft':127 'dramat':435,465 'draw':49 'enabl':643,777 'enhanc':169 'entri':639 'env':645 'environ':635,712 'exampl':437 'expand':176 'explicit':213 'fal':705 'fast':128 'final':322 'flag':729 'flat':144,225,573 'flux':20,116,123,131,202,250,334,490,496,507,536,546,799 'flux-dev':122,249 'flux-pro':115,333,495,506 'flux-schnel':130,535,545 'focus':97,208 'font':217 'format':736 'free':684 'gemini':154 'gemini-pow':153 'general':119 'generat':32,41,48,63,164,262,347,761 'geometr':581 'give':12 'go':594 'grid':351 'handl':85,600 'high':205,525 'host':597 'icon':59,143,227,576 'id':253,377,396,414 'ideogram':21,139,211,803 'illustr':58,150,224,427 'imag':2,34,40,56,64,134,166,261,285,289,323,337,350,361,383,641,646,651,660,671,744,747,754 'image-gen-proxy.vercel.app':670 'image-studio':1,640 'imageurl':336,340,743 'implement':701 'includ':89 'index':373,392 'initi':795 'instal':613 'instant':539 'instruct':733 'intent':104 'iter':129 'job':83,376,395,413 'job-id':375,394,412 'json':329,637 'juggl':6 'key':9,39,590,706,709 'kind':54 'layout':220 'legnext':708 'legnext.ai':790 'leopard':457 'light':183,195,464 'll':703 'logo':60,137 'luxuri':511 'majest':455 'make':52 'masterpiec':204 'midjourney':19,90,110,192,292,305,344,353,370,389,409,444,452,723,770,774,785,798 'minim':572 'mode':768,776 'model':73,80,105,191,238,248,252,332,369,388,408,451,505,544,568,738 'mountain':461 'nano':159,749,801 'nano-banana':158 'need':591,704,730 'negat':297 'negative-prompt':296 'node':235,366,385,405,448,502,541,565 'non':765 'non-block':764 'num':284 'num-imag':283 'number':287 'obtain':679 'offer':354 'one':15 'one-command':14 'option':358 'output':735 'painter':109 'paramet':244,245 'pass':751 'peak':462 'per':686 'perfum':512 'persist':631,675 'photo':57,422 'photographi':210,521 'photorealist':112,499 'pick':77 'poll':93,327,728,772 'portrait':113 'poster':138 'power':155 'preserv':364 'preview':540 'pro':117,335,497,508 'product':114,500,520 'profession':209,519 'prompt':171,180,239,258,263,298,404,453,509,548,570 'provid':786 'proxi':598,618,628,648,662,666,692,696 'purpos':120 'qualiti':185,447 'quick':101,126 'ratio':242,266,476,529,551 'raw':201 'recraft':146,221,561,569,804 'refer':102,700,746,753 'reference-imag':752 'regener':401 'releas':796 'reproduc':309 'request':593 'requir':259,328,658 'rerol':411 'result':314 'return':294,312,320,739 'run':231 'scheme':579 'schnell':132,537,547 'script':175,233,316,719 'sdxl':151,800 'see':693 'seed':306,307 'send':338 'server':603 'server-sid':602 'set':633,682 'setup':26,587 'shadow':523 'shape':582,745 'sharp':207 'shot':501 'side':604 'simpl':580 'simplifi':716 'skill':11,42,75,606,638 'skill-image-studio' 'skill.md':732 'snow':456 'snowi':460 'soft':522 'source-wells1137' 'specifi':222 'speed':106 'stabil':793 'state':68 'state-of-the-art':67 'step':167,229,310 'strong':380,434 'studio':3,642,647,652,661,672 'style':157,182,200,218,228,564,584 'styliz':149 'subtl':363,418,431 'success':330,742 'support':303 'switch':784 'tabl':256 'text':136,215 'thing':299 'tire':4 'token':620,632,653,655,673,676,687 'topic-agent-skills' 'topic-agentskills' 'topic-audio-generation' 'topic-claude-code' 'topic-claude-code-marketplace' 'topic-claude-code-plugin' 'topic-claude-code-skill' 'topic-claude-code-skills' 'topic-claude-skills' 'topic-content-creation' 'topic-image-generation' 'topic-openclaw' 'true':331,644 'ttapi':788 'turbo':775 'type':399,416,429 'u1':482 'u1-u4':481 'u4':483 'ultra':196,467 'unifi':734 'upscal':360,372,415 'url':324,649,663,668 'url1':755 'url2':756 'use':27,43,615,625,685 'user':45,103,178,343,356,439,488,532,554 'v':198,472 'v1':486 'v1-v4':485 'v1.0.0':794 'v1.1.0':783 'v1.2.0':773 'v1.3.0':762 'v2.0.0':715 'v4':487 'variabl':636,657,713 'variat':381,391,398,428 'variation-typ':397 'vector':141,223,583 'vector/icon':563 'vercel':711 'wait':318 'want':30,623 'white':517,585 'without':35 'work':607 'worri':36 'your-proxy.vercel.app':650 'zero':25,588 '图标':557 '帮我做一个':555 '帮我画一只在雪山上的雪豹':440 '快速给我看个草稿':533 '想放大哪张':480 '扁平风格':558 '生成一张香水产品海报':491 '生成完成':479 '用':489 '电影感光效':441 '白色背景':492 '蓝色系':559 '还是创建变体':484","prices":[{"id":"b247c72d-35b9-44ad-b704-f772a4bd31e9","listingId":"e3acfa88-4cea-44cb-aebb-d7a1f50170dd","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"wells1137","category":"media-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:23:51.080Z"}],"sources":[{"listingId":"e3acfa88-4cea-44cb-aebb-d7a1f50170dd","source":"github","sourceId":"wells1137/media-skills/image-studio","sourceUrl":"https://github.com/wells1137/media-skills/tree/main/skills/image-studio","isPrimary":false,"firstSeenAt":"2026-04-18T22:23:51.080Z","lastSeenAt":"2026-05-01T07:01:41.484Z"}],"details":{"listingId":"e3acfa88-4cea-44cb-aebb-d7a1f50170dd","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"wells1137","slug":"image-studio","github":{"repo":"wells1137/media-skills","stars":24,"topics":["agent-skills","agentskills","audio-generation","claude-code","claude-code-marketplace","claude-code-plugin","claude-code-skill","claude-code-skills","claude-skills","content-creation","image-generation","openclaw","skill-md","skillsmp"],"license":null,"html_url":"https://github.com/wells1137/media-skills","pushed_at":"2026-03-04T08:32:42Z","description":"A collection of open-source Agent Skills for content creation — images, audio, and video.","skill_md_sha":"50fe62bab3acae422dc872dc791bc44fd270b26b","skill_md_path":"skills/image-studio/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/wells1137/media-skills/tree/main/skills/image-studio"},"layout":"multi","source":"github","category":"media-skills","frontmatter":{"name":"image-studio","description":"Tired of juggling 8 API keys? This skill gives you one-command access to Midjourney, Flux, Ideogram, and more, with zero setup. Use when you want to generate any image without worrying about API keys."},"skills_sh_url":"https://skills.sh/wells1137/media-skills/image-studio"},"updatedAt":"2026-05-01T07:01:41.484Z"}}