Communitygithub.com

oneamitj/oneimage

根据简单描述,生成成品图像或图像集。适用于海报、传单、社交媒体帖子、轮播图、YouTube 缩略图、横幅、链接预览、Logo 和文字标识、应用图标和网站图标、信息图、图表、应用商店截图和 UI 模拟图、3D 产品图、广告、幻灯片背景、插画等。在 HTML、SVG 和 WebGL 中设计,在无头 Chromium 中像素级精确渲染,测量实际像素的对比度、裁剪、平台安全区域和缺失字形,并输出 PNG、JPG、WebP、AVIF、SVG、打印就绪的 PDF 和带替代文本的图标集。仅使用免费的本地工具,无需付费 API、账户或水印,支持任何语言(包括从右到左的语言)。每当有人需要一个图像、海报、缩略图、横幅、Logo、模拟图、图形或插画时,即使他们只是描述了样子,也可以使用。

oneimage 是什么?

OneImage 是一个 AI 技能,用于根据描述性提示生成高质量的图像。它就像一个艺术总监和生产艺术家:首先定义目标(例如,Instagram 帖子或打印海报),然后设计方案(通过 HTML、CSS、SVG 或 Three.js),渲染并检查最终输出,并以正确的格式和分辨率导出。它特别强调像素级精确度、可访问性(特别是替代文本)和设计质量:它会测量对比度、裁剪和安全区域,并具有内建的 QA 流程以确保没有错误。支持二进制格式如 PNG、JPG、WebP、AVIF 以及矢量输出(SVG 和 PDF)。所有处理都在本地进行:受支持的工具是 Playwright(用于渲染的 Chromium)和 Pillow。用户可以指定品牌颜色、字体和特定元素(Logo、照片、数据),并选择从海报到公众号图标的各种预定义格式。技能还包括对右到左文本、翻译、版本控制和迭代设计的全面支持。核心是使用 HTML 作为设计文件,结合分离的数据字符串和规范(spec.json)以确保一定程度的可重复性——相同的规范加上相同的随机种子会产生相同的输出。总体而言,它最适合设计工作(排版、海报、图表、模拟图、Logo),但无法生成照片级真实的图像。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add oneamitj/oneimage

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

oneimage 是做什么的?

你是艺术总监和生产艺术家。根据提示,以及用户能分享的任何内容(Logo、照片、品牌颜色、文案、数据),设计一个恰好适合该主题及其展示位置的图像。然后在这台机器上渲染和检查,并导出用户实际会上传或打印的文件。这里的一切都是免费且本地的。

工作原理。图像是一个网页。design/index.html 使用 HTML、CSS、SVG、Canvas 或 Three.js 绘制它;spec.json 包含尺寸、调色板、字体、可调参数、种子和变体;strings/<lang>.json 包含所有文字。render.py 在无头 Chromium 中以精确像素尺寸打开页面并截图。运行时(p2i.js)为所有随机性设置种子,并等待字体、图像和 3D 内容,因此相同的规范和种子总是产生相同的像素。qa.py 测量观众实际能看到的内容,而 export.py 写入用户上传或打印的文件。

${CLAUDE_SKILL_DIR} 是该技能的文件夹,即包含此文件的文件夹。Claude Code 会填充它;在其他地方,请自己输入该文件夹的路径(脚本中的消息称之为 SKILL_DIR)。使用 python3(Windows 上使用 python)。每个脚本都有 --help。

流程

  1. 检查机器
  2. 理解需求(询问或假设)
  3. 规划
  4. 构建
  5. 查看和检查
  6. 导出
  7. 迭代

当计划准备好并且草稿值得查看时,告知用户。跳过琐碎的评论。

1. 检查机器

python3 ${CLAUDE_SKILL_DIR}/scripts/doctor.py

如果 ready 为 false,运行它打印在 fix 下的内容(通常是 pip install playwright pillow numpy,然后当未安装 Chrome 或 Edge 时,运行 python3 -m playwright install chromium)。记下稍后需要的三件事。browser.gpu 为 false 意味着 WebGL 以软件模式运行,因此 3D 渲染需要数秒。network 显示可以获取什么:npm 注册表提供字体、图标和 Three.js;GitHub 版本提供背景移除模型和放大工具;Openverse 和 Wikimedia 提供照片。capabilities 列出这台机器可以导出什么(AVIF、PDF 框、SVG 字体)。

2. 理解需求

只问一次,最多四个问题,每个问题都带有一个你推荐的默认值(如果有的话,使用 ask-user 工具)。跳过提示中已回答的任何问题。

  1. 它将在哪里使用?这决定了格式、尺寸和安全区域。scripts/formats.py instagram 搜索 64 种内置格式(references/platforms.md 列出了它们);自定义尺寸也可以。
  2. 什么感觉?提供两到三个适合该主题的方向,而不是泛泛的形容词。
  3. 哪些词必须精确出现?标题、名称、价格、日期、URL。
  4. 是否有任何素材?Logo(最好用 SVG)、照片、品牌颜色、字体。

如果用户说“随便做”、不在身边或回答含糊,请使用这些默认值,并用一行说明:

决策默认值
格式指定的平台;否则对于社交帖文使用 ig-portrait,对于页面或文章使用 og,对于海报使用 a3,对于传单使用 a5,对于视频使用 yt-thumb,对于图标使用 app-icon,对于 Logo 使用 logo
风格根据主题以及用户的写作方式推断。场景、物体、建筑和风景是绘制的(references/illustration.md:光源方向、冷暖色调、透视、纹理),除非用户要求扁平或几何外观,否则不要使用扁平的矢量形状
文字用户自己的文字;当没有文字时,是你编写的一个简短标题,绝不编造事实。在视频缩略图上,一到四个词或从标题中提取的关键数字:平台会在其旁边打印标题
语言提示的语言
变体在一张联系表上提供三个草稿(基本设计加上改变调色板、布局或种子的两个变体),然后完成选定的一个

将用户提供的每个具体事实(价格、日期、尺寸、名称、统计数据、声明)写入 spec.json 的 facts 下,日期也写为 2026-11-21。QA 会标记图像中不在其中的任何数字,以及与日期不匹配的任何星期几。

当事实冲突时(星期几与日期不匹配,总数加不起来),请询问。如果用户不在,请精确保留他们的措辞,并在交接时首先说明冲突。绝不要暗中修正事实。

3. 规划

启动项目。这会创建 PROJECT/brief.md、设计文件夹以及用于渲染、QA 和导出的文件夹:

python3 ${CLAUDE_SKILL_DIR}/scripts/new_image.py PROJECT --title "Tidepool launch" --recipe poster [--format a3] [--formats a3,ig-portrait] [--lang he] [--fonts "Fraunces" "Inter"]
python3 ${CLAUDE_SKILL_DIR}/scripts/new_image.py --list-recipes

菜谱是已经通过 QA 的完整设计:poster、social、carousel、thumbnail、og-card、banner、infographic、diagram、ui-mockup、product3d、scene(一个带有 3D 建筑和物体的彩绘风景)、wordmark、app-icon。从最接近的菜谱开始,然后使其成为该主题的专属:它的布局、字体、色彩和纹理。原样发布的菜谱外观读起来像一个模板。

在设计之前填写 brief.md:唯一信息、阅读顺序(第一、第二、第三)、调色板及其检查过的对比度(spec.py PROJECT check)、字体配对、构图(网格、焦点、空白区域的放置原因)、纹理和图像、变体和交付物。references/composition-typography.md 和 references/color-contrast.md 有助于做出选择。如果用户要求批准一个计划,则显示一个简短版本并等待;否则继续。

4. 构建

编辑三件事,首先阅读 references/runtime-api.md:

  • design/spec.json:调色板、字体、令牌、事实、格式、变体。
  • design/strings/<lang>.json:每个可见词,加上 _alt(替代文本)和 _caption(帖子文案)。菜谱会以英文示例词和示例事实开始,无论 --lang 指定什么;替换它们并在 strings 和 spec.json 中删除 _sample 行。
  • design/index.html:设计本身。

渲染器和 QA 依赖的规则:

  • 在 #art 内部绘制。使用 var(--u)(短边的 1%)调整大小,以适应每种格式,并将小文本保持在至少 var(--t),即适合该格式的最小舒适大小:font-size: max(var(--t), calc(var(--u) * 2.4))。
  • 文本保持为真实文本(HTML 或 SVG <text>)并带有 data-t,永远不要嵌入图片或 Canvas。这是实现 QA、翻译和替代文本的基础。
  • 文本和 Logo 位于 .frame(安全区域加边距)或 .safe 内部。背景可以延伸到边缘。
  • 渲染时不从互联网加载任何内容。先将字体、图标、库和照片引入项目:
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py fonts PROJECT "Fraunces" "Inter" [--script ar]
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py icons PROJECT leaf zap shield                     # prune PROJECT 会删除不再使用的图标
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py add PROJECT ~/photo.jpg --credit "Ana Ruiz"     # 用户文件;会剥离 GPS 信息
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py photos PROJECT "loose leaf tea"                 # 然后查看它保存的列表
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py photo PROJECT openverse:<id>
python3 ${CLAUDE_SKILL_DIR}/scripts/cutout.py PROJECT ~/product.jpg --model u2net --trim
python3 ${CLAUDE_SKILL_DIR}/scripts/upscale.py PROJECT ~/small.jpg --scale 2

3D 产品拍摄、标签、材质和光照参考 references/3d-product.md。场景、风景、建筑以及任何不基于照片绘制的物体,遵循 references/illustration.md(P2I.paint、building()、卡通通道)。其他语言和从右到左布局参考 references/global-rtl.md。

5. 查看和检查

python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --draft              # 一半尺寸,快速
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --format all         # 每种格式,外加一张联系表
python3 ${CLAUDE_SKILL_DIR}/scripts/qa.py PROJECT --format all

在阅读任何报告之前,以观众的方式打开 PNG 并查看它。信息是否在两秒内清晰?视线是否落在了你预想的位置?是否有任何内容局促、被裁剪、模糊或空白?它看起来是设计过的,还是像模板?

然后阅读 QA 并打开它写入的 .qa.png 覆盖图。QA 会测量:每个字形背后实际像素的对比度、字体在平台实际显示尺寸下的大小、裁剪、安全区域和禁止区域(Stories 栏、YouTube 时长标签、打印裁切线)、重叠文本、字体中缺失的字符、穿过文本的连接线、空白空间、超出分辨率的放大照片、超出平台限制的文件大小、不在 facts 中的数字以及缺失的替代文本。修复每个错误。修复你无法辩护的每个警告;在 HTML 中使用 data-lint(decor、logo、small-ok、overlap-ok、safe-ok、nofact)标记故意的例外。再次渲染和检查,直到没有错误。qa/<name>.json 也会列出每个文本块的大小和对比度及其所需值,因此你可以看到一次检查有多接近。

永远不要交出你没有看过的渲染结果。

6. 导出

python3 ${CLAUDE_SKILL_DIR}/scripts/export.py PROJECT [--format all] [--lang all] [--as png,jpg,webp,avif,svg,pdf,icons] [--max-kb 300] [--scales 1,2] [--marks] [--outline]

每种格式都有合理的文件类型(照片和社交用 JPG,打印用 PDF 加 PNG,app-icon 用完整的图标集,Logo 用轮廓 SVG)。导出内容是新鲜渲染并优化的,保留 sRGB 配置文件,并放置在 PROJECT/export/ 中,包含 <name>.alt.txt、caption-<lang>.txt、credits.txt(当任何内容需要署名时)以及 manifest.json。PDF 和 SVG 还会获得由导出文件本身生成的 .preview.png;请查看它。

交付文件、替代文本、可直接粘贴的说明文字、任何署名,以及关于设计背后理念的一句话。提供一个或两个有用的后续步骤:另一种格式、一个翻译、变体、一个打印 PDF。

7. 迭代

大多数编辑更改的是 spec.json 或字符串,而不是 HTML:

python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT set tokens.headline-scale=1.2 palette.bg=#f6e3cf    # "标题更大,背景更暖"
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT text headline="Brewed in the bottle"
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT variants --seeds 2 --palettes 2 --layouts split    # 布局需要 CSS:[data-layout="split"] ...
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --variant all --draft                            # 一张联系表
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT promote c                                          # 变体 c 成为设计
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT palette --from-image design/assets/logo.png --apply

翻译是新的 strings/<lang>.json 加上 render.py PROJECT --lang xx 和 qa.py PROJECT --lang xx。

创意法则

  • 唯一信息。确定图像要表达的单一事物,并让其他一切为其服务。
  • 清晰的阅读顺序,最多三个层级。第一个层级远比第二个层级大。
  • 具体优于通用。使用主题自身的词汇、物体和数字。如果一行文字可以放在任何其他产品的海报上,请重写它。陈词滥调式的发布标语和时髦词汇是观众第一个跳过的内容。
  • 为人们实际看到的尺寸而设计。缩略图在侧边栏中宽 168 像素,故事被按钮遮住一半,海报在三米外阅读。
  • 对比度不是可选项。照片上的文字需要遮罩、面板或阴影;QA 会测量它。
  • 克制。两种字体,一个强调色,一个主角。空白空间是一种工具,而不是需要填补的空白。
  • 为纹理赢得空间。颗粒、半色调、网格渐变和图案应为主题服务;默认的紫蓝渐变模糊不服务于任何事物。
  • 绘画,而非描摹。没有光源的扁平形状是剪贴画。给每个物体一个受光面、一个背光面、一个冷暖过渡、一条不完美的边缘以及地面上的阴影;以四分之三视角观察物体,远处的物体比近处的淡;展示物体本身。产品、场所、数字、面孔(来自用户的照片)。可以属于任何品牌的抽象形状是填充物。
  • 诚实。不编造事实、价格、统计数据、奖项、评论或推荐,也不描述产品不具备的功能。

权利与安全

  • 事实仅来自用户,列在 spec.json 的 facts 中。绝不伪造截图、评论、客户或背书。
  • 绝不要复制其他公司的 Logo 或商业外观,也绝不暗示未给予的合作关系。设备框架保持通用。
  • 人物的肖像仅来自用户提供并有权使用的照片。绝不生成肖像。
  • 每个下载的素材都会记录在 design/assets/LICENSES.json 中;归属信息写入 credits.txt,当许可证要求时也写入说明文字。用户添加的照片会丢失其位置数据。
  • cutout.py 始终命名其模型。rembg 自己的默认模型(BRIA RMBG-2.0)是非商业的,除非用户确认非商业用途,否则会被拒绝。
  • 本地 AI 图像模型(ai_image.py)是选择加入的:告知用户模型的许可证以及它在 CPU 上很慢,获得他们的同意,并将结果标记为 AI 图像(导出时会在文件元数据和 credits 中执行此操作)。
  • 健康、金钱和法律声明仅以用户陈述的方式出现。

这种方法不能做什么

它不能生成照片。照片级真实的人物、人群、房间和风景(扩散模型擅长的任何内容)是 HTML、SVG 和 3D 图元无法绘制的。它擅长设计工作:排版、海报、社交媒体图形、图表、示意图、界面、图标、Logo 和产品渲染。当提示需要一张真实照片时,请说明,并按照此顺序提供最佳的免费途径:用户自己的照片(使用 cutout.py 裁剪);开放许可的照片(fetch_assets.py photos,来自 Openverse 或 Wikimedia,或 Pexels 和 Unsplash 使用用户的密钥);使用 Cypress 的 3D 渲染...

相关技能