[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JH8ECNF2H56VBNTMTWW136":3,"skill-same:01M6JH8ECNF2H56VBNTMTWW136":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":13,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6JH8ECNF2H56VBNTMTWW136","generate-image",null,"Generate images using AI. Use when asked to generate, create, or make images, textures, icons, sprites, artwork, visual assets, or mockups. Supports OpenAI (gpt-image-2) and Google Gemini (Nano Banana). Requires an API key for the chosen provider.","JiayiV\u002Fquestion_mixing","JiayiV","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54466889?v=4","01M6JFJYYMRZ3QRGP9339JNQ2K","01M6JFJZ35KB0QVT50NAHPJA7G",0,"MIT","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fgenerate-image\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"generate","generate image","image","assets","sprites","for","nano","visual","banana","nano banana","provider","images","use","api","gpt","openai","icons","create","gemini","google","2026-11-10 10:12:30",false,"---\nname: generate-image\ndescription: >-\n  Generate images using AI. Use when asked to generate, create, or make images, textures,\n  icons, sprites, artwork, visual assets, or mockups. Supports OpenAI (gpt-image-2) and\n  Google Gemini (Nano Banana). Requires an API key for the chosen provider.\nargument-hint: \"[description of the image to generate]\"\nlicense: MIT\nmetadata:\n  version: \"2.1.0\"\n  providers: \"openai, gemini\"\n---\n\n# Generate Image\n\nYou are an image generation assistant. When invoked, follow the workflow below.\n\n## Workflow\n\n1. **Check for API keys** — check whether `SKILL_IMAGE_GEN_OPENAI_KEY` and\u002For `SKILL_IMAGE_GEN_GEMINI_KEY` are set in the environment.\n2. **If one key is set** — use that provider. No need to ask.\n3. **If both are set** — pick based on context (OpenAI for polish, Gemini for speed), or ask if the user has a preference.\n4. **If no keys are set** — run the Onboarding section.\n5. **Generate the image** using the appropriate API reference.\n6. **Tell the user** where the image was saved.\n\n## Onboarding\n\nOnly run this if no keys are set. Guide the user conversationally.\n\n1. Ask which provider they'd like to use:\n   - **OpenAI (gpt-image-2)** — High quality, excellent text rendering, paid per image\n   - **Google Gemini (Nano Banana)** — Fast, free tier available, great for iteration\n2. Direct them to get an API key:\n   - OpenAI → https:\u002F\u002Fplatform.openai.com\u002Fapi-keys\n   - Gemini → https:\u002F\u002Faistudio.google.com\u002Fapikey\n3. Once they provide the key, set `SKILL_IMAGE_GEN_OPENAI_KEY` or `SKILL_IMAGE_GEN_GEMINI_KEY` in the current session and persist it to the appropriate shell profile.\n4. Proceed to generate the image they originally asked for.\n\n## API Reference: OpenAI\n\n**Method:** `POST`\n**URL:** `https:\u002F\u002Fapi.openai.com\u002Fv1\u002Fimages\u002Fgenerations`\n\n**Headers:**\n- `Authorization: Bearer \u003CSKILL_IMAGE_GEN_OPENAI_KEY>`\n- `Content-Type: application\u002Fjson`\n\n**Body (JSON):**\n```json\n{\n  \"model\": \"gpt-image-2\",\n  \"prompt\": \"\u003Cuser prompt>\",\n  \"n\": 1,\n  \"size\": \"1024x1024\",\n  \"quality\": \"medium\"\n}\n```\n\n| Field | Default | Options |\n|---|---|---|\n| model | `gpt-image-2` | `gpt-image-2`, `gpt-image-1` |\n| size | `1024x1024` | `1024x1024`, `1024x1536`, `1536x1024`, `auto` |\n| quality | `medium` | `low`, `medium`, `high` |\n\n**Response:** `data[0].b64_json` contains the base64-encoded image. Decode it and save to the output path. If `data[0].url` is present instead, download the image from that URL.\n\n## API Reference: Google Gemini (Nano Banana)\n\n**Method:** `POST`\n**URL:** `https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta\u002Fmodels\u002F\u003Cmodel>:generateContent`\n\n**Headers:**\n- `x-goog-api-key: \u003CSKILL_IMAGE_GEN_GEMINI_KEY>`\n- `Content-Type: application\u002Fjson`\n\n**Body (JSON):**\n```json\n{\n  \"contents\": [{\"parts\": [{\"text\": \"Generate an image: \u003Cuser prompt>\"}]}],\n  \"generationConfig\": {\"responseModalities\": [\"TEXT\", \"IMAGE\"]}\n}\n```\n\n| Field | Default | Options |\n|---|---|---|\n| model (in URL) | `gemini-2.0-flash-exp` | `gemini-2.0-flash-exp`, `gemini-2.5-flash-image` |\n\n**Response:** Find `candidates[0].content.parts[]` — look for a part with `inlineData.data` (base64 image) and `inlineData.mimeType`. Decode and save.\n\n**Error cases:** `error` key (API error), `promptFeedback.blockReason` (safety block), `finishReason: \"SAFETY\"` (filtered).\n\n## Agent Guidelines\n\n- Choose the output path intelligently — save to the project's relevant directory (e.g., `assets\u002F`, `images\u002F`, or the current directory).\n- For game textures, enrich prompts with \"seamless\", \"tileable\", \"game asset\".\n- For batch generation, make multiple API calls in parallel.\n- If the user asks to switch providers or what options are available, explain both and help them set up.\n- Always create the output directory before saving.\n- Ensure special characters in the user's prompt are properly escaped in the JSON body.\n","# Generate Image\n\nYou are an image generation assistant. When invoked, follow the workflow below.\n\n## Workflow\n\n1. **Check for API keys** — check whether `SKILL_IMAGE_GEN_OPENAI_KEY` and\u002For `SKILL_IMAGE_GEN_GEMINI_KEY` are set in the environment.\n2. **If one key is set** — use that provider. No need to ask.\n3. **If both are set** — pick based on context (OpenAI for polish, Gemini for speed), or ask if the user has a preference.\n4. **If no keys are set** — run the Onboarding section.\n5. **Generate the image** using the appropriate API reference.\n6. **Tell the user** where the image was saved.\n\n## Onboarding\n\nOnly run this if no keys are set. Guide the user conversationally.\n\n1. Ask which provider they'd like to use:\n   - **OpenAI (gpt-image-2)** — High quality, excellent text rendering, paid per image\n   - **Google Gemini (Nano Banana)** — Fast, free tier available, great for iteration\n2. Direct them to get an API key:\n   - OpenAI → https:\u002F\u002Fplatform.openai.com\u002Fapi-keys\n   - Gemini → https:\u002F\u002Faistudio.google.com\u002Fapikey\n3. Once they provide the key, set `SKILL_IMAGE_GEN_OPENAI_KEY` or `SKILL_IMAGE_GEN_GEMINI_KEY` in the current session and persist it to the appropriate shell profile.\n4. Proceed to generate the image they originally asked for.\n\n## API Reference: OpenAI\n\n**Method:** `POST`\n**URL:** `https:\u002F\u002Fapi.openai.com\u002Fv1\u002Fimages\u002Fgenerations`\n\n**Headers:**\n- `Authorization: Bearer \u003CSKILL_IMAGE_GEN_OPENAI_KEY>`\n- `Content-Type: application\u002Fjson`\n\n**Body (JSON):**\n```json\n{\n  \"model\": \"gpt-image-2\",\n  \"prompt\": \"\u003Cuser prompt>\",\n  \"n\": 1,\n  \"size\": \"1024x1024\",\n  \"quality\": \"medium\"\n}\n```\n\n| Field | Default | Options |\n|---|---|---|\n| model | `gpt-image-2` | `gpt-image-2`, `gpt-image-1` |\n| size | `1024x1024` | `1024x1024`, `1024x1536`, `1536x1024`, `auto` |\n| quality | `medium` | `low`, `medium`, `high` |\n\n**Response:** `data[0].b64_json` contains the base64-encoded image. Decode it and save to the output path. If `data[0].url` is present instead, download the image from that URL.\n\n## API Reference: Google Gemini (Nano Banana)\n\n**Method:** `POST`\n**URL:** `https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta\u002Fmodels\u002F\u003Cmodel>:generateContent`\n\n**Headers:**\n- `x-goog-api-key: \u003CSKILL_IMAGE_GEN_GEMINI_KEY>`\n- `Content-Type: application\u002Fjson`\n\n**Body (JSON):**\n```json\n{\n  \"contents\": [{\"parts\": [{\"text\": \"Generate an image: \u003Cuser prompt>\"}]}],\n  \"generationConfig\": {\"responseModalities\": [\"TEXT\", \"IMAGE\"]}\n}\n```\n\n| Field | Default | Options |\n|---|---|---|\n| model (in URL) | `gemini-2.0-flash-exp` | `gemini-2.0-flash-exp`, `gemini-2.5-flash-image` |\n\n**Response:** Find `candidates[0].content.parts[]` — look for a part with `inlineData.data` (base64 image) and `inlineData.mimeType`. Decode and save.\n\n**Error cases:** `error` key (API error), `promptFeedback.blockReason` (safety block), `finishReason: \"SAFETY\"` (filtered).\n\n## Agent Guidelines\n\n- Choose the output path intelligently — save to the project's relevant directory (e.g., `assets\u002F`, `images\u002F`, or the current directory).\n- For game textures, enrich prompts with \"seamless\", \"tileable\", \"game asset\".\n- For batch generation, make multiple API calls in parallel.\n- If the user asks to switch providers or what options are available, explain both and help them set up.\n- Always create the output directory before saving.\n- Ensure special characters in the user's prompt are properly escaped in the JSON body.\n",{"name":5,"license":14,"metadata":48,"description":7,"argument-hint":51},{"version":49,"providers":50},"2.1.0","openai, gemini","[description of the image to generate]","main","068c2486ccc0f8d200a3db4d21ec137064eda3b4","skills\u002Fgenerate-image","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing","https:\u002F\u002Fgithub.com\u002FJiayiV","2026-08-25 16:30:52",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add JiayiV\u002Fquestion_mixing --skill generate-image",{"tool":64,"command":65},"bunx","bunx skills add JiayiV\u002Fquestion_mixing --skill generate-image",{"tool":67,"command":68},"pnpm","pnpm dlx skills add JiayiV\u002Fquestion_mixing --skill generate-image","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fgenerate-image\u002FSKILL.md",true,[],[73,97,125,153,180,215],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":43},"01M6NN9PJS9NHWPDG4QP93BP8F","webmcpify","Make a web app agent-ready — propose a WebMCP tool manifest, integrate, verify in a real browser, heal; unrelated code stays untouched. Use for \"webmcpify\", \"add WebMCP\", or \"expose app actions to AI agents\".","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fwebmcpify\u002FSKILL.md",[],[75,80,81,82,83,84,85,86,87,88,89,90,91,35,92,93,94,95,28,96],"github","ai agents","web","notes","code","browser","https","actions","manifest","inventory","verify","tool","ready","unrelated","app","scope","webmcp",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":101,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":43},"01M6NN6KZE5RBN6NGHN2WXV1RE","vardoger-analyze","Use when the user asks to personalize the GitHub Copilot CLI assistant, adapt Copilot to their style, use vardoger, or analyze their Copilot CLI conversation history. Reads the local session directory at `~\u002F.copilot\u002Fsession-state\u002F`, extracts recurring preferences and conventions, and writes a fenced personalization block into `~\u002F.copilot\u002Fcopilot-instructions.md`. Runs entirely on the user's machine via the local `vardoger` CLI (`pipx install vardoger`); no network calls and no uploads. Triggers: 'personalize my copilot', 'analyze my copilot history', 'tailor copilot to me', 'run vardoger', 'update my copilot instructions from history', 'make copilot learn my style'.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fvardoger-analyze\u002FSKILL.md",[],[105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124],"vardoger analyze","analyze","directory","cli","github copilot","copilot","run","update","learn","network","my style","install","conversation","me","local","github copilot cli","pipx","my","at","copilot instructions",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":135,"publishedAt":43},"01M6NN3CZGQP3XAJ04BM1NNYGT","transloadit-media-processing","Process media files (video, audio, images, documents) using Transloadit. Use when asked to encode video to HLS\u002FMP4, generate thumbnails, resize or watermark images, extract audio, concatenate clips, add subtitles, OCR documents, or run any media processing pipeline. Covers 86+ processing robots for file transformation at scale.","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Ftransloadit-media-processing\u002FSKILL.md",[131,132],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":133,"categoryName":134,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[136,137,138,139,140,141,142,143,144,145,146,147,148,35,34,149,150,151,28,152],"transloadit media processing","Media","media processing","processing","MCP","mcp server","documents","subtitles","pipeline","ocr","Video","Audio","mp4","files","transformation","free","hls",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":162,"publishedAt":43},"01M6NN28E92F9GH4WFYQ2H1Y15","terraform-azurerm-set-diff-analyzer","Analyze Terraform plan JSON output for AzureRM Provider to distinguish between false-positive diffs (order-only changes in Set-type attributes) and actual resource changes. Use when reviewing terraform plan output for Azure resources like Application Gateway, Load Balancer, Firewall, Front Door, NSG, and other resources with Set-type attributes that cause spurious diffs due to internal ordering changes.","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fterraform-azurerm-set-diff-analyzer\u002FSKILL.md",[159],{"categoryNo":160,"categoryName":161,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[163,164,165,166,167,168,169,170,171,35,172,173,33,174,175,176,177,178,179,28],"terraform","SET","terraform azurerm set diff analyzer","diff","analyzer","diffs","azure","gateway","firewall","only","resource changes","resources","load balancer","attributes","front","load","balancer",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":197,"publishedAt":43},"01M6NN1QMH2TDYWTH3XY3N5XPV","technical-job-search","Use this skill when a software engineer asks for help with job search tasks: parsing or analyzing a job description, tailoring a CV\u002Fresume, writing a cover letter, evaluating a job offer, or drafting a post-interview follow-up email. Do not activate for general career advice unrelated to an active job search action.","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Ftechnical-job-search\u002FSKILL.md",[186,189,194],{"categoryNo":187,"categoryName":188,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":190,"categoryName":191,"taxonomyType":192,"taxonomyTypeDesc":193},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",{"categoryNo":195,"categoryName":196,"taxonomyType":192,"taxonomyTypeDesc":193},"01JBSEEDCAT000000000000038","人力资源",[198,199,200,201,202,203,204,205,106,206,35,207,208,209,210,211,212,213,28,214],"search","Job Search","technical job search","technical","writing","tasks","email","parsing","interview","up","engineer","general","activate","do","task","cv","letter",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":221,"publishedAt":43},"01M6NMZFA67XYS1GS09WT42235","steno-mode","Shorthand-first response compression that cuts ~40% of response tokens while preserving technical precision and exact literals. Use when the user says \"steno mode\", \"shorthand mode\", \"compressed responses\", \"token reduction\", \"brief structured output\", or invokes \u002Fsteno. Supports four compression levels: lite, brief, court, machine. Do not trigger for requests needing polished prose such as onboarding\u002Ftutorial content, stakeholder or customer-facing copy, or teaching-focused explanations.","https:\u002F\u002Fgithub.com\u002FJiayiV\u002Fquestion_mixing\u002Fblob\u002Fmain\u002Fskills\u002Fsteno-mode\u002FSKILL.md",[],[222,223,224,225,226,201,227,35,211,228,229,230,231,232,233,234,235,236,28,237],"steno mode","mode","customer","brief","first","tutorial","teaching","tokens","as","trigger","structured output","machine","output","court","requests","response compression"]