jp-skill-image
将自然语言请求转换为由 Cloudflare Workers AI(@cf/black-forest-labs/flux-1-schnell)生成的图像。完整流程:用户描述所需内容,Claude 进行提示词工程,脚本调用 Cloudflare API,图像以 JPG 格式保存到本地。
适用场景
用户希望根据描述生成图像 —— "生成一个咖啡店的 logo"、"为我的 AI 视频做一个缩略图"、"一张赛博朋克猫的照片"。Claude 负责将模糊的请求转化为质量较高的提示词,然后再生成图像。
不适用场景: 编辑现有图像、矢量艺术/SVG 或视频。
第 0 步 —— 始终先检查 .env
在执行脚本之前,请确认凭据可解析。脚本按以下顺序寻找凭据:实际环境变量 → 当前目录或任何父目录中的 .env → ~/.claude/skills/jp-skill-image/.env(全局回退)。
python3 -c "import sys; sys.path.insert(0, '$HOME/.claude/skills/jp-skill-image'); from generate import load_credentials; print('OK' if all(load_credentials()) else 'MISSING')"
如果缺少任一变量(新用户/新克隆的项目),请勿尝试生成图像 —— 先按照以下三步简短地指导用户获取凭据:
- CF_ACCOUNT_ID:Cloudflare Dashboard → 任意域名/项目 → Workers & Pages → Overview(显示在右侧),或者直接访问
https://dash.cloudflare.com/profile/account-id... 如果页面上未显示,请使用 Dashboard URL 中的 ID 或左侧边栏 Manage Account 部分中的 ID(不是“My Profile”)。 - CF_API_TOKEN:
https://dash.cloudflare.com/profile/api-tokens→ Create Token → Custom Token → 权限Account.Workers AI Scripts: Edit→ Account Resources:你的账户 → Create。 - 创建
.env文件 —— 在项目根目录,或~/.claude/skills/jp-skill-image/.env(使其在任何文件夹下生效)—— 内容为:
CF_ACCOUNT_ID=xxxxx
CF_API_TOKEN=xxxxx
如果项目使用企业代理访问互联网(检查 .npmrc 中是否存在 HTTPS_PROXY,或对外部 API 的请求因超时而失败),请额外添加:
HTTPS_PROXY=<企业代理>
确认变量存在后,继续正常流程。
如何执行
从任何目录(图像保存到当前目录的相对路径):
python3 ~/.claude/skills/jp-skill-image/generate.py "<优化后的提示词>" -o <文件名>.jpg --steps <N>
"<优化后的提示词>"—— 由你编写的提示词(见下文),而不是用户的原始措辞。-o/--output—— 保存位置(默认为out.jpg)。使用简短且描述性的文件名,例如coffee-logo.jpg。--steps—— 扩散步数(默认为4)。flux-schnell 针对少量步数进行了优化,但要获得最佳质量,请使用 8,除非用户要求速度。切勿使用低于 4 的值。
脚本成功时会打印 Saved <文件名> ...,失败时会打印可读的错误信息(包括已内部处理的 JSON 响应中包含 Base64 图像的情况)。
Claude 的真正工作:编写最高质量的提示词
此技能的价值在于,Claude 在调用脚本之前,将用户的意图扩展为生动、具体且技术正确的提示词。切勿直接传递用户的请求——务必先对其进行处理。
高质量的 Flux 提示词应按以下顺序命名要素:
- 主要主体 —— 场景中的内容,具体且无歧义。
- 风格/媒介 —— 真实照片、3D 渲染、扁平矢量、水彩、等距、像素艺术等。
- 构图与取景 —— 特写、全景、居中、三分法、相机角度。
- 光照与氛围 —— 黄金时刻、霓虹灯、柔和影室灯、戏剧性阴影、逆光。
- 颜色与细节程度 —— 特定色调、背景、纹理、细节层次(“highly detailed”、“clean minimal”)。
- 技术质量(适用于逼真的照片/渲染)—— 诸如“cinematic”、“8k”、“sharp focus”、“professional photography”之类的术语有助于 Flux 接近专业级效果。
转换示例:
- 用户:“一个咖啡店的 logo”
- 你传递的提示词:“minimalist logo of a steaming coffee cup, flat vector illustration, warm brown and cream palette, centered on a clean off-white background, simple bold shapes, modern branding, professional design”
硬性规则:
- 提示词始终使用英文(Flux 对英文响应更好)。
- 1-2 个句子,信息密度高,无填充内容。
- 切勿要求图像中包含可读的文本/单词——Flux 无法很好地渲染它们。
- 如果用户未提供足够细节,请自行填充最合适的创意决策(除非主体确实模糊不清,否则不要提问)。
- 默认使用
--steps 8以最大化质量;仅在用户明确要求速度时才降低到 4。
生成后
- 确认文件已保存(脚本会打印路径)。
- 告知用户文件名和你使用的确切提示词,以便其调整并重新执行。
- 如果用户想要变体,请使用修改后的提示词和新的
-o重新执行。
技术要求
- 通过上述第 0 步中的三种来源之一解析
CF_ACCOUNT_ID和CF_API_TOKEN。 - Python 3.8+。无外部依赖——脚本仅使用标准库(
urllib),因此不需要pip install或虚拟环境。 - 脚本解码 Cloudflare API 返回的 Base64 响应,并将其保存为二进制 JPG 文件——响应本身并非直接为图像。