[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6J37P52TNP8TJCQBFTTZPBH":3,"skill-same:01M6J37P52TNP8TJCQBFTTZPBH":99},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":29,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":72,"ownerHtmlUrl":73,"ownerBlogUrl":6,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6J37P52TNP8TJCQBFTTZPBH","image-poster",null,"Single-image generation skill for posters, key art, and editorial\nillustrations. Defaults to gpt-image-2 but is provider-agnostic — the\nsame workflow drives Flux, Imagen, or Midjourney via the active\nupstream tooling. Output is one or more PNG\u002FJPEG files saved to the\nproject folder.","onfire7777\u002Funiversal-ai-skills-library","onfire7777","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F240866566?v=4","01M6HZJCF2QEW8DY7HE1JDKGK2","Jake B","01M6HZJCKK8SEXKN76V9SGKZ12",17,"MIT","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fimage-poster\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"image","image poster","poster","project","design","at","hand","cover","top","ink","palette","false","SET","flux","workflow","active","but","files","Art","html","2026-11-10 10:12:30",false,"---\nname: image-poster\ndescription: |\n  Single-image generation skill for posters, key art, and editorial\n  illustrations. Defaults to gpt-image-2 but is provider-agnostic — the\n  same workflow drives Flux, Imagen, or Midjourney via the active\n  upstream tooling. Output is one or more PNG\u002FJPEG files saved to the\n  project folder.\ntriggers:\n  - \"poster\"\n  - \"key art\"\n  - \"illustration\"\n  - \"image\"\n  - \"cover art\"\n  - \"海报\"\n  - \"插画\"\nod:\n  mode: image\n  surface: image\n  scenario: design\n  preview:\n    type: html\n    entry: example.html\n  design_system:\n    requires: false\n  example_prompt: |\n    Editorial poster for an indie film festival — one bold abstract\n    silhouette over a warm, slightly grainy paper background; hand-set\n    sans serif title at the top, festival dates and venue at the bottom\n    in monospace. Muted ochre + ink palette.\n---\n\n# Image Poster Skill\n\nProduce **one** finished image asset per turn unless the user asks for\nvariations. Image generation rewards a tight, structured prompt — your\njob is to assemble that prompt from the user's brief, then dispatch.\n\n## Resource map\n\n```\nimage-poster\u002F\n├── SKILL.md         ← you're reading this\n└── example.html     ← what the resulting card looks like in Examples\n```\n\n## Workflow\n\n### Step 0 — Read the project metadata\n\nThe active project carries `imageModel`, `imageAspect`, and (optional)\n`imageStyle` notes. Use them as the upstream model + canvas + style\nanchor; only ask the user to fill them in if they're marked `(unknown\n— ask)`.\n\n### Step 1 — Compose the prompt\n\nPlan in this exact order before calling any tool:\n\n1. **Subject + composition** — what is in the frame, where, at what\n   scale; eye-line and crop.\n2. **Lighting + mood** — natural \u002F studio \u002F moody; warm \u002F cool; key\n   plus rim plus fill; time of day if outdoor.\n3. **Palette + textures** — hex anchors when the user gave a brand\n   palette; otherwise a 3-word mood tag (e.g. \"muted ochre + ink\").\n4. **Camera \u002F lens** — only if the user wants photographic realism\n   (\"85mm portrait, shallow DOF\") or a specific film stock.\n5. **What to avoid** — common AI-slop patterns (\"no extra fingers, no\n   warped text, no logo placeholders\").\n\n### Step 2 — Dispatch via the media contract\n\nUse the unified dispatcher — do **not** call upstream provider APIs by\nhand. Run from your shell tool:\n\n```bash\n\"$OD_NODE_BIN\" \"$OD_BIN\" media generate \\\n  --project \"$OD_PROJECT_ID\" \\\n  --surface image \\\n  --model \"\u003CimageModel from metadata>\" \\\n  --aspect \"\u003CimageAspect from metadata>\" \\\n  --output \"\u003Cshort-descriptive-name>.png\" \\\n  --prompt \"\u003Cthe full assembled prompt from Step 1>\"\n```\n\nThe command prints one line of JSON: `{\"file\": {\"name\": \"...\", ...}}`.\nThe daemon writes the bytes into the project folder; the FileViewer\npicks it up automatically.\n\n### Step 3 — Hand off\n\nReply with a one-paragraph summary of the prompt you used and the\nfilename returned by the dispatcher (e.g. *I generated `hero-poster.png`\nwith `gpt-image-2` at 1:1.*). Do **not** emit an `\u003Cartifact>` tag.\n\n## Hard rules\n\n- One image per turn unless asked for variations.\n- Honor `imageAspect` exactly — the upstream cost is the same; matching\n  the aspect avoids a re-render.\n- No filler typography in the image itself unless the user asked for\n  in-frame text. Real copy beats lorem.\n- Save every render — never describe an image without producing the\n  file. The user expects something to open in the file viewer.\n","# Image Poster Skill\n\nProduce **one** finished image asset per turn unless the user asks for\nvariations. Image generation rewards a tight, structured prompt — your\njob is to assemble that prompt from the user's brief, then dispatch.\n\n## Resource map\n\n```\nimage-poster\u002F\n├── SKILL.md         ← you're reading this\n└── example.html     ← what the resulting card looks like in Examples\n```\n\n## Workflow\n\n### Step 0 — Read the project metadata\n\nThe active project carries `imageModel`, `imageAspect`, and (optional)\n`imageStyle` notes. Use them as the upstream model + canvas + style\nanchor; only ask the user to fill them in if they're marked `(unknown\n— ask)`.\n\n### Step 1 — Compose the prompt\n\nPlan in this exact order before calling any tool:\n\n1. **Subject + composition** — what is in the frame, where, at what\n   scale; eye-line and crop.\n2. **Lighting + mood** — natural \u002F studio \u002F moody; warm \u002F cool; key\n   plus rim plus fill; time of day if outdoor.\n3. **Palette + textures** — hex anchors when the user gave a brand\n   palette; otherwise a 3-word mood tag (e.g. \"muted ochre + ink\").\n4. **Camera \u002F lens** — only if the user wants photographic realism\n   (\"85mm portrait, shallow DOF\") or a specific film stock.\n5. **What to avoid** — common AI-slop patterns (\"no extra fingers, no\n   warped text, no logo placeholders\").\n\n### Step 2 — Dispatch via the media contract\n\nUse the unified dispatcher — do **not** call upstream provider APIs by\nhand. Run from your shell tool:\n\n```bash\n\"$OD_NODE_BIN\" \"$OD_BIN\" media generate \\\n  --project \"$OD_PROJECT_ID\" \\\n  --surface image \\\n  --model \"\u003CimageModel from metadata>\" \\\n  --aspect \"\u003CimageAspect from metadata>\" \\\n  --output \"\u003Cshort-descriptive-name>.png\" \\\n  --prompt \"\u003Cthe full assembled prompt from Step 1>\"\n```\n\nThe command prints one line of JSON: `{\"file\": {\"name\": \"...\", ...}}`.\nThe daemon writes the bytes into the project folder; the FileViewer\npicks it up automatically.\n\n### Step 3 — Hand off\n\nReply with a one-paragraph summary of the prompt you used and the\nfilename returned by the dispatcher (e.g. *I generated `hero-poster.png`\nwith `gpt-image-2` at 1:1.*). Do **not** emit an `\u003Cartifact>` tag.\n\n## Hard rules\n\n- One image per turn unless asked for variations.\n- Honor `imageAspect` exactly — the upstream cost is the same; matching\n  the aspect avoids a re-render.\n- No filler typography in the image itself unless the user asked for\n  in-frame text. Real copy beats lorem.\n- Save every render — never describe an image without producing the\n  file. The user expects something to open in the file viewer.\n",{"od":55,"name":5,"triggers":60,"description":66},{"mode":30,"preview":56,"surface":30,"scenario":34,"design_system":58,"example_prompt":59},{"type":49,"entry":57},"example.html",{"requires":51},"Editorial poster for an indie film festival — one bold abstract\nsilhouette over a warm, slightly grainy paper background; hand-set\nsans serif title at the top, festival dates and venue at the bottom\nin monospace. Muted ochre + ink palette.",[32,61,62,30,63,64,65],"key art","illustration","cover art","海报","插画","Single-image generation skill for posters, key art, and editorial\nillustrations. Defaults to gpt-image-2 but is provider-agnostic — the\nsame workflow drives Flux, Imagen, or Midjourney via the active\nupstream tooling. Output is one or more PNG\u002FJPEG files saved to the\nproject folder.\n","main","2a76bf42ce5c860adf8d0f3fcf3f6804109ac65b","skills\u002Fimage-poster",0,"https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fwiki","https:\u002F\u002Fgithub.com\u002Fonfire7777","trying to create something actually useful","2026-09-11 13:25:26",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add onfire7777\u002Funiversal-ai-skills-library --skill image-poster",{"tool":82,"command":83},"bunx","bunx skills add onfire7777\u002Funiversal-ai-skills-library --skill image-poster",{"tool":85,"command":86},"pnpm","pnpm dlx skills add onfire7777\u002Funiversal-ai-skills-library --skill image-poster","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fimage-poster\u002FSKILL.md",true,[90,96],{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},".openskills.json","REFERENCE","参考文档",216,"https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fimage-poster\u002F.openskills.json",{"path":57,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":97,"sourceHtmlUrl":98},3652,"https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fimage-poster\u002Fexample.html",[100,128,137,147,168,184],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":115,"publishedAt":50},"01M6J7MPK8ZE9VQJR4KK6ZMZJQ","zyte-api-automation","Automate Zyte API tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzyte-api-automation\u002FSKILL.md",[106,109,110],{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":111,"categoryName":112,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[116,117,118,119,120,121,122,123,124,125,126,127],"automation","api","zyte api automation","for","MCP","via","composio","automate","first","Tools","search","tasks",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":50},"01M6J7MK45K2ZZ0EWTP1N6SZ7F","zylvie-automation","Automate Zylvie tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzylvie-automation\u002FSKILL.md",[134],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[116,136,120,127,119,121,122,123,124,125,126],"zylvie automation",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":144,"publishedAt":50},"01M6J7MGDCVZ3YCXGEAPR5V3MS","zoominfo-automation","Automate Zoominfo tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzoominfo-automation\u002FSKILL.md",[143],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[145,146,116,123,122,125,121,127,119,126,120,124],"zoominfo","zoominfo automation",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":154,"publishedAt":50},"01M6J7MDK48N09B7C6H9TCPY9A","zoom-out","Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzoom-out\u002FSKILL.md",[153],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[155,156,157,158,159,160,161,162,163,164,165,166,167],"zoom out","zoom","perspective","code","re","you","with","understand","it","use","context","how","true",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":175,"publishedAt":50},"01M6J7MAD47Q9A55AK3EXS914H","zoho-mail-automation","Automate Zoho Mail tasks via Rube MCP (Composio): email sending, folders, labels, and mailbox management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzoho-mail-automation\u002FSKILL.md",[174],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[176,177,178,179,116,180,126,127,120,125,181,119,121,182,122,183,123,124],"mail","zoho mail automation","zoho","zoho mail","email","labels","mailbox","management",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":194,"publishedAt":50},"01M6J7M76HTWPP8TRWWCDS42NB","zoho-invoice-automation","Automate Zoho Invoice tasks via Rube MCP (Composio): invoices, estimates, expenses, clients, and payment tracking. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fonfire7777\u002Funiversal-ai-skills-library\u002Fblob\u002Fmain\u002Fskills\u002Fzoho-invoice-automation\u002FSKILL.md",[190,191],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":192,"categoryName":193,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000040","财务",[195,116,178,196,120,121,119,197,198,199,122,200,201,123,124,125,126,127],"invoice","zoho invoice automation","invoices","expenses","clients","payment","tracking"]