手机壁纸定制器 (Phone Wallpaper Customizer) v2
何时使用
- 用户上传/描述一张喜欢的图,想"做成我的手机壁纸"
- 用户要"定制壁纸:换颜色 / 加元素 / 改风格 / 适配某机型"
- 用户要一段可直接粘贴到 GPT Image 2(或 ImageGen)的生图提示词
- 用户要"一套系列":手机(含 iPhone 13 等指定品牌)+ iPad + 电脑多设备,或手机锁屏/主屏同主题两套
- v2 游戏化触发:用户说"来张今天的壁纸""测测我的灵魂壁纸""做个日历壁纸""情侣壁纸" → 见下方「游戏化玩法」
- v2 配色触发:用户说"温暖一点""要高级感""给个配色方案" → 调用
scripts/palette.py(见下方第 2.5 步) - v2.1 动态壁纸触发:用户说"动态壁纸""会动的""Live Photo""长按能动的锁屏" → 见下方「动态壁纸(iOS Live Photo)」
核心设计原则(九条铁律 · 必读)
> 手机壁纸定制的设计地基,所有提示词与生成都须遵守。详细落地见 references/ 对应文件。
- 竖版高分辨率适配:现代旗舰比例 9:19.5(非 9:16),分辨率 ≥1170×2532(iPhone)/ ≥1080×2400(安卓);9:16 仅旧机(iPhone SE)兼容。详见
device-presets.md。 - 主体留白避遮挡:关键视觉(人脸/文字/Logo)置于中心安全区,避开系统时间、日期、Dock、手势条。详见
ui-ergonomics.md+device-presets.md。 - 安全区留白下限:距顶/底 ≥150–200px 净空;高屏(2532px 高)下百分比安全区实际更宽(顶 15%≈380px / 底 20%≈506px),px 下限作为托底。
- 风格光影统一:若涉及 AI 合成(如人像换背景),强制色调、光照方向、阴影柔和度与背景一致,杜绝「贴图感」。
- 简洁与对比:背景避免过度杂乱纹理,保证图标可识别;含文字时保证字体与背景明度对比,必要时加半透明底色块。
- 模块化参数解耦:风格 / 配色 / 安全区 / 设备预设各自独立成模块(palette.py、element-template、device-presets…),改一项不动全局。
- 智能提示词工程:内置固定高质量模板,把「赛博朋克」「极简治愈」等自然语言自动转成模型可执行详细 Prompt,降低小白门槛(见
prompt-builder.md)。 - 多格式兼容(输出):覆盖 JPG/PNG 与 1:1、3:4、9:19.5 等比例适配多机型。⚠️ Base64 本地上传 / 公网 URL 输入目前未实现(TODO),当前仅支持参考图文件或文字描述。
- 水印设计层规避:生成时主体避开右下角 30%×20% 水印区,让水印落在纯色背景;去水印脚本只兜底(实验性·0积分)。详见
references/watermark-removal.md。
核心产物(两种交付形态)
- 形态 A(默认):一份完整、可直接复制的生图提示词(GPT Image 2 格式,含尺寸 / 安全区 / 风格 / 配色 / 元素)+ 5 维评分自检表。用户拿走粘贴到 GPT Image 2 出图。
- 形态 B(可选·本地出图):若运行环境挂载了 ImageGen 工具且用户要求"直接出图",skill 可当场调用 ImageGen 生成真实图片,无需切平台粘贴。
成本说明(诚实,不拍马屁):
- 提示词文本生成 = 低 token 消耗,几乎可忽略。
- 本地出图(形态 B)≠ 免费:ImageGen 单张约消耗 5–10 credits,这是模型推理成本,skill 免不掉。所谓"免费"仅在你订阅已含生图额度(边际成本≈0)时成立,相比雇设计师/切平台确实省事省钱,但别当真 0 成本狂点。
- 真正的省钱逻辑:把试错压在提示词阶段(形态 A 多调几版不花钱),确认满意后再用形态 B 出 1–2 张,而非盲生一堆。
运行环境与平台兼容性(重要 · 跨运行时必读)
- 核心能力零工具依赖:形态 A(提示词生成)是纯文本产出,不需要任何图像生成工具、密钥或联网账号。任何能加载本 skill 的运行时(WorkBuddy / OpenClaw / 其它 Skill 兼容体)都能直接跑,出图提示词复制即走。
- 形态 B(直接出图)可选:仅当运行时已挂载
ImageGen(或等价生图工具)、且用户明确要求"在这里生成"时才调用。skill 无法替运行时注册工具——若生图工具未挂载,自动降级回形态 A(见第 5 步第 4 条回退约定),绝不卡死。 - Agent 行为约定:加载本 skill 后,先判断当前运行时是否暴露生图工具;暴露则形态 B 可用,否则一律走形态 A,并在回复中明确提示"拿去 GPT Image 2 / 即梦 / 通义万相粘贴"。
- 结论:缺 ImageGen 的运行时照样能用本 skill 做"提示词定制 + 配色引擎 + 天气/日历/游戏化 + 去水印审计",只是不能一键生图;把"生图"交给用户手里的任意生图工具即可。
- 注册位置提醒:本 skill 必须被安装到运行时的 skills 目录(如
~/.workbuddy/skills/phone-wallpaper-customizer/)才能按名字被 Skill 工具发现;只放在项目工作区文件夹里 ≠ 已注册。安装与跨运行时接入指引见README.md。
工作流(6 步,第 5 / 5.5 / 6 步可选)
第 1 步:获取参考与意图
- 有参考图 → 委托
image-prompt-reverseskill 执行「六维反向工程」(主体与构图 / 风格流派 / 色彩系统 / 光影与质感 / 细节元素 / 技术参数),取其结构化输出,再叠加本 skill 的「壁纸专属叠加层」(情绪/氛围 + 安全区 + 设备预设,见references/prompt-builder.md顶部),进入第 2 步。
> 若该 skill 未挂载,按prompt-builder.md顶部兜底六维自行拆解(字段对齐,不另维护详细规则)。 - 无参考图 → 直接进入第 2 步,让用户用文字描述想要的风格。
- 目标机型未知:若用户说"我的手机"却说不出型号 → 运行
python scripts/device_lookup.py --recommend 4列出 4 个常见机型让用户选,避免让他翻参数。
第 2 步:定制要素模板引导(关键)
向用户展示 references/element-template.md 的模板,逐项追问缺失项(参考图/描述已明确的跳过)。必填三项:核心风格、主色调、目标机型/尺寸。其余按需追问。用一句话汇总确认后再生成。
第 2.5 步:配色(v2 · 降低门槛)
原则:能用心情词就别问 hex。 用户若只说"温暖/高级/治愈"等感觉,或完全没提颜色:
1. 运行配色引擎:
bash
python scripts/palette.py --mood 温暖 # 出 4 套和谐方案
python scripts/palette.py --hex #2A6CF0 # 有基色时围绕展开
python scripts/palette.py --mood 温暖 --preview # 输出 SVG 色卡(可渲染,用户直接看色)
2. 用 --preview 生成的 SVG 色卡渲染给用户看(不必懂 hex),让他一眼挑一套;同时把 4 套 palette 简表贴出作为文字备份。
3. 选中后用其主色/辅色/点缀/背景填模板 [配色],并追加防 AI 味配色约束(见 references/color-engine.md)。
> 仅当用户有明确品牌色/参考色时,才走 --hex 进阶通道。这把"必填色值"变成"可选体验"。
第 3 步:组装提示词
按 references/prompt-builder.md 的模板填充:
- 优先使用用户原话的风格词与配色词;
- 尺寸从 references/device-presets.md 取预设(或运行 python scripts/device_lookup.py --query <机型> 取精确值),或原样写入用户自定义比例;
- 强制写入「安全区」约束(顶部 15% / 底部 20% 留净空);
- 锁屏/主页分区铁律 + 配色锁亮 + 抽牌效应应对:务必先读 references/ui-ergonomics.md——壁纸不含任何系统 App 图标/UI 元素,图案只放装饰角色且不可挡 Dock 按钮,配色写 hex + BRIGHT NOT dark 锁死亮度,改图只做最小 delta 不重画。该文件含锁屏/主页实测分布图与踩坑记录,直接照抄其布局结构。
- 国产模型额外给中文版:若目标平台为即梦 / 通义万相 / 醒图,按 references/prompt-builder.md 的「国产模型中文提示词」模板再输出一份中文提示词(同义),用户二选一粘贴。
第 4 步:输出 + 5 维评分
- 可复制提示词块:用代码块包裹,开头标注「复制下面整段」。
- 5 维评分表(构图 / 配色 / 风格一致性 / 安全区 / 可生性),每项 1–5 分 + 风险备注;任一项 <4 分必须给出修正建议再交付。
- 一句话使用建议:贴到哪个平台、是否需要微调。
第 5 步(可选):本地出图
触发条件:用户明确说"直接生图 / 出图 / 在这里生成",且当前环境已挂载 ImageGen 工具。
动作:
1. 取第 3 步组装好的提示词,去掉句尾的 aspect ratio … 分句(ImageGen 不接受自然语言里的尺寸,改用参数)。
2. 从 references/device-presets.md(或 python scripts/device_lookup.py --query <机型>)取该机型的宽高,调用 ImageGen:--width <宽> --height <高>,自然语言部分原样传入。
3. 出图后如实告知成本:本次消耗约 5–10 credits(若订阅已含额度则边际≈0)。
4. 若环境无 ImageGen 工具 → 回退到形态 A,提示用户拿走提示词去 GPT Image 2 粘贴。
> 注意:第 5 步会真实消耗 credits,不是免费。用户没要求出图时,只给形态 A 的提示词,不要主动调 ImageGen。
第 5.5 步(✅ 优化版·保留·实验性):去水印后处理
> 状态(v2.4 起):优化后保留为实验性兜底工具。核心理念——首选设计层规避,脚本只兜底。
> - 🟢 0 积分:纯本地 PIL 处理,不调生图模型。
> - 🔴 不稳定:仅对「落在纯色背景上的右下角浅色角标」安全;角色与水印重叠时必翻车。
> - 完整说明、失败案例、避坑:references/watermark-removal.md(必读)。
前置(设计层规避 · 最关键):组装提示词时必须写入「右下角留净空」条款(见 references/prompt-builder.md 模板),让主体避开右下角 30%×20% 水印区。水印落在纯色背景上,擦除零风险。
执行:
1. 先审计(0 风险):python scripts/remove_watermark.py <图> --audit
- 报告 zone_solid=true 且无 subject_adjacent/flesh 跳过 → 安全,进入第 2 步;
- 否则不要强制擦,回去用设计层规避重生成。
2. 正式去水印:python scripts/remove_watermark.py <图> <输出图>
- 脚本内置主体重叠守卫:检测到水印区落在角色/非纯色背景时失败安全中止(不改动原图),避免改坏角色颜色。
3. 交付时如实说明:去水印是本地实验性处理,不保证 100% 干净;平台强制水印生成时无法抑制。
第 6 步(可选):情境化生成(天气 / 日历 / 游戏化联动 · v2.5)
> 把外部情境(天气、日期、人格)自动织进壁纸,让产出"每天 / 每次都不一样"。四类都复用第 3 步模板 + 安全区 + 右下角规避条款,只替换 [主体] / [配色] / 追加 typography 片段。
- 天气壁纸:用户说"按今天天气出张壁纸 / 下雨天给我温暖点的" → 运行
python scripts/weather_style.py --city <城市>(或--lat/--lon),把返回的prompt_fragment+palette_hint拼进模板(见references/prompt-builder.md§⑦)。雨天/雪/阴 → 温暖室内风,晴/多云 → 明亮户外风。结果本地缓存 1 小时(断网先回退缓存、再降级中性)。 - 日历壁纸:用户说"来张今天的日历壁纸 / 带日期的" → 运行
python scripts/calendar_meta.py --with-lunar,把md+weekday作 typography 设计元素、term_palette注入配色(见references/prompt-builder.md§⑧)。每天自动不同。 - 灵魂壁纸(性格测试):用户说"测测我的灵魂壁纸" → 运行
python scripts/soul_quiz.py --draw --with-light抽题(5 维度分层抽样,复测题面自动不同),把题目抛给用户;收到答案后python scripts/soul_quiz.py --answers ABABA得人格(16 基型 × 昼夜修饰 = 32 变体)→ 风格+mood+主体+文案。 - 今日运气盲盒:用户说"来张运气壁纸 / 抽盲盒" → 先问机型(查
python scripts/device_lookup.py --recommend)→ 运行python scripts/fortune_box.py --user "<机型或昵称>"。同一天同一人抽到的永远是同一张(日期+标识确定性种子 + 本地台账去重);二次抽会返回同一张并提示"今天的运势已经定啦",想尝鲜用--date tomorrow预抽明天、--force强制重抽。
> 联网失败时 weather_style.py 先回退 1 小时本地缓存、再优雅降级为中性风格;calendar_meta.py 纯本地 0 依赖,无需联网。
系列模式(一套多设备 + 锁屏/主屏)
触发:用户说"一套系列 / 手机+iPad+电脑 / 锁屏主屏一套 / 指定品牌机型(如 iPhone 13)"。
流程:
1. 先定母版:锁定共享身份——同一 风格词 + 同一 配色 hex + 同一 情绪。这是"一套"的视觉血缘(规则见 references/device-presets.md 末节)。
2. 按设备实例化:母版不变,仅替换分辨率与安全区(手机锁屏/主屏、iPad、电脑各有规则,见 references/device-presets.md)。
3. 手机拆两套:锁屏 = 母版 hero 呈现(三段式分区,角色可铺满仅避顶部时钟);主屏 = 镜像分区姊妹版(见 references/ui-ergonomics.md 第二节:顶部绿区留空给状态栏、中部留白给 App 图标、底部 Dock 粉色区放缩小角色于左右角落、绝不画系统图标、底部 15% 纯净留空给 Dock 按钮)。主屏不做模糊/淡化版(用户明确反对)。
4. 输出顺序:母版摘要 → 手机锁屏 → 手机主屏 → iPad → 电脑,逐条给提示词并标注设备/用途。
5. 一致性校验:交付前确认所有提示词共用同一 palette hex 与 style 词。
> 系列模式同样兼容形态 A(给全套提示词)与形态 B(若要求当场出图,逐张调用 ImageGen,注意累计 credits)。
游戏化玩法(v2 新增 · 解决"有趣性"短板)
> 完整规则见 references/gamification.md。以下为触发与流程速查。
玩法 ① 灵魂壁纸 · 性格测试(v2.8 扩库:8 → 32 变体)
触发:用户说"测测我的灵魂壁纸 / 我的专属壁纸 / 什么风格适合我"。
流程:
1. 抽题:python scripts/soul_quiz.py --draw --with-light。5 个维度轴(能量/质地/密度/色温/光线)各有 2 道备选题,每次每维随机抽 1 道 —— 同一用户复测题面不同,不会腻。
2. 把题目原样抛给用户(每题二选一),收集答案串(如 ABABA)。
3. 解析:python scripts/soul_quiz.py --answers ABABA --json → 得人格编号(16 基型)+ 风格关键词 + mood + 主体意象 + 人格文案 + 昼夜光线修饰(prompt 片段 + 配色微调)。
4. mood 送 scripts/palette.py --mood <mood> --preview 出色卡给用户看,风格送 prompt-builder.md 出提示词,末尾追加光线修饰片段。
5. 交付时附那句人格文案(如"你的安静,自带海风")——这是分享传播的钩子。
> 用户只想快速测 → 省掉 --with-light,4 题得 16 基型即可。
玩法 ② 今日运气壁纸盲盒(v2.8 日期去重 · 有仪式感)
触发:用户说"来张运气壁纸 / 抽张盲盒 / 今天的运气壁纸"。
流程:
1. 先问机型(python scripts/device_lookup.py --recommend 4 列候选)→ 定安全区。
2. 抽卡:python scripts/fortune_box.py --user "<机型或昵称>" --json。
3. 用返回的 风格卡 + 配色卡(mood) + 元素卡 组合约束出图,底部小字放运势文案(半透明、低存在感、不抢主体)。
4. 若返回 meta.already_drawn = true,不要假装重抽了一张——如实告诉用户"今天的运势已经定啦,同一天抽到的永远是同一张",并给两个出路:--date tomorrow 预抽明天,或 --force 强制重抽。
5. 稀有度(普通 70% / 稀有 25% / 隐藏 5%)若非普通,把 rarity.bonus 的加成描述追加进提示词。
> 去重逻辑:种子 = hash(日期 + 用户标识),台账存本地 temp(保留 7 天自动清理),不上传任何数据。
玩法 ③ 日历壁纸(接 calendar_meta.py)/ 玩法 ④ CP 匹配
详见 references/gamification.md,按需启用。
> 游戏化玩法产出同样是「可复制提示词(形态 A)」,可叠加安全区/系列规则。
动态壁纸(iOS Live Photo · v2.1 新增)
> 完整格式与流水线见 references/dynamic-ios.md。以下为流程速查。
触发:用户说"动态壁纸 / 会动的 / Live Photo / 长按能动的锁屏",且目标为苹果系。
流程:
1. 出静态封面:按本 skill 常规流程(含安全区)生成锁屏 hero 图 = cover.jpg(即 Live Photo 封面帧)。
2. 出动态短片提示词:在封面提示词基础上追加动态描述(见 dynamic-ios.md 第三节),首帧必须锁定封面、9:19.5、≤3s、30fps。
3. 合成 + 设置:把封面图 + 短片交给 IntoLive / WidgetClub 等合成 Live Photo,再于照片 App 设锁屏并开「实况」图标。
4. 交付必告知:仅锁屏长按触发、主屏静止、三开关(实况图标/减弱动态/低电量)、别用微信传(丢元数据)。
> 若环境挂载了多模态内容生成且支持图像转视频(首帧锁定),第 2 步可直接产出短片;否则交付「封面图 + 动态意图描述」让用户自行倒入视频工具。
平台兼容
- GPT Image 2(默认输出 / 形态 A):自然语言提示词,尺寸写在句尾("aspect ratio 9:19.5" 或像素)。用户拿到即可一键复制。
- ImageGen(本地出图 / 形态 B):自然语言同上,尺寸用
--width --height参数传入(工具层处理,提示词内不写像素)。单张 5–10 credits,非免费。
反拍马屁自检(交付前必做)
- 若参考图风格极细(特定画师笔触、独特肌理),明确告知反推可能不准,建议用户附更精确的文字描述。
- 若用户要"完全复刻某版权图",提醒版权与平台合规风险,改为"提取风格 + 原创元素"。
- 不夸大出图效果;评分 <4 的项如实标红。