poem-ink-distill · 诗词水墨蒸馏
把一首古诗端到端做成「封面 + 一句一画」的诗词水墨蒸馏页 HTML 成品:先设计该诗专属封面(3:4 竖版),再给每句诗配一幅 AI 中国水墨画 + 楷体原文 + 水墨画寓意 + 字词注解,套用暖米宣纸的「蒸馏长页」视觉,最终交付一个自包含的 HTML 成品页,并附标题/简介/标签。
> 付费说明:本 Skill 为按次付费内容服务,接入支付宝 AI 按量付费协议。买家请求成品前需完成「probe → pay → complete」三阶段付费流程;未付款时接口返回 HTTP 402 与 Payment-Needed 账单。
When to use
- 用户给了一首诗(标题 + 作者 + 正文),要「古代水墨画 + 原文 + 注解」版本
- 用户要求把某首诗词做成古诗配画、诗词鉴赏卡片
- 关键词:水墨画、古诗配画、诗词鉴赏、一句一画、诗中有画、诗词图卡
付费流程(支付宝 AI 按量付费)
计费与定价
- 单次价格:¥0.05(每「一首诗 → 成品 HTML」计费一次)
- 计费方式:支付宝 AI 按量付费,买家按次扫码支付
- 输入:诗名 / 作者 / 正文(POST JSON)
- 输出:自包含 HTML 成品页(封面 + N 句水墨画 + 意象速查 + 带走一句)
依赖
| 角色 | 依赖包 | 说明 |
|---|---|---|
| 买家侧(本机) | @alipay/agent-payment |
安装:npx -y @alipay/agent-payment@latest install |
| 买家侧(CLI) | alipay-bot |
官方 CLI,封装验签/付款/查单,不自行实现签名或付款 |
| 卖家侧(部署方) | @alipay/alipay-aipay |
安装:npx -y @alipay/alipay-aipay@latest install |
三阶段流程(probe / pay / complete)
脚本:scripts/poem-ink-paid.mjs(只编排,不接触密钥)。
1. probe — 请求资源,未付款拿 402 账单
node scripts/poem-ink-paid.mjs probe --poem "望庐山瀑布" --author "李白" --state-dir .state/SESSION_KEY
- 向资源接口
RESOURCE_URL发 POST 请求 - 未付款时接口返回 HTTP 402,响应头带
Payment-Needed账单 - 把账单落地为状态文件
.state/<session>/payment-needed.txt(供 pay 阶段使用) - 若已付款(返回 200)则直接得到资源,跳过付费
2. pay — 推进支付,买家扫码授权
node scripts/poem-ink-paid.mjs pay --state-dir .state/SESSION_KEY --session-id SESSION_KEY
- 把 402 账单(
payment-needed.txt)+ 原始请求交给官方 CLI:alipay-bot 402-buyer-pay - 携带凭证重试:
--intent-summary保留原始请求(诗名/作者),支付后复用同一订单,原请求参数保持一致 - 买家扫码授权完成付款,支付宝返回订单号
out-shake-no
3. complete — 验价调用 + 商家履约
node scripts/poem-ink-paid.mjs complete --state-dir .state/SESSION_KEY --out-shake-no OUT_SHAKE_NO
- 用订单号调用
alipay-bot 402-query-payment-status查单验付 - 服务端验付成功后:触发商家履约,卖家生成 N 张水墨画 + 组装 HTML,返回成品
- 验付失败/过期:不交付资源,可重试;同一订单号重试不重复扣费
5 项缺失项自查清单
| 自查项 | 要求 | 本 Skill 落点 |
|---|---|---|
| ✅ 402 账单下发 | 未付款返回 HTTP 402 + Payment-Needed |
probe 阶段 |
| ✅ 携带凭证重试 | 支付后携 Payment-Proof 重试,原请求参数一致 |
pay 阶段 --intent-summary 保留原请求 |
| ✅ 服务端验付 | 验证凭证与订单,无效/过期不交付 | complete 阶段 402-query-payment-status |
| ✅ 商家履约 | 返回资源后发履约确认,失败可重试 | complete 成功后触发履约 ack |
| ✅ 订单持久化与幂等 | 订单状态可恢复,不重复扣费/交付 | .state/ 落地订单,同 out-shake-no 幂等 |
资源 URL(卖家部署)
- 卖家接口:
https://your-api.example.com/poem-ink-distill/generate(占位,待替换为真实接口) - 单次价格:¥0.05
- 请求:
POST+Content-Type: application/json,body{ "poem": "...", "author": "..." }
不做什么
- ❌ 不写密钥、不接触签名(全部交给
alipay-bot) - ❌ 不自行实现付款逻辑
- ❌
.env/.state/状态文件 /node_modules不入发布包
核心铁律
- 水墨画必须用 AI 生图(ImageGen),不要用 SVG 手绘。纯 SVG 描边复刻不了毛笔提按 + 墨在宣纸渗透的「筋骨」,做出来是简笔画(弧线+竖线,山像面包、松像几何线)。AI 生图才能出真水墨(披麻皴、点苔、留白、枯笔飞白、墨分五色)。
- 每句一张卡片 = 原文 + 水墨画 + 水墨画寓意 + 字词注解,四件套缺一不可。
- 配色铁律:暖米宣纸底、墨绿 accent、香槟金点缀、朱砂红印章(印章是朱砂红不是绿)。
- 批量生图要串行或错开时刻,并行会导致时间戳相同、文件互相覆盖。
- 每首诗必须单独设计封面(不是用 header 代替):封面要有标题主视觉、水墨背景、诗名作者和一句传播钩子,默认 3:4 竖版优先。
- 交付物就是 HTML 成品,不做图片导出:产出一个自包含 HTML 蒸馏长页,用
present_files预览交付;水墨画是 ImageGen 生成的内容素材(嵌在 HTML 里的<img>),不要把它再截图/导出成图卡成品。
Steps(卖家侧生成逻辑,用于理解成品构成)
> 以下 0–5 步是卖家接口内部执行的内容生成逻辑;买家侧只需完成上面的付费三阶段,付费成功后直接拿到成品 HTML。
Step 0 — 封面设计(每首诗必做)
先为该诗生成 1 张独立封面(不与正文卡片混用),用于成品首屏。封面内容要求:
- 视觉主元素:1 张独立的中国水墨背景(可复用诗中核心意象,但建议单独生图)
- 文字信息:诗名(主标题)+ 作者(副标题)+ 一句传播钩子(如「8句诗8幅水墨,一句一画」)
- 版式比例:默认 3:4 竖版;封面水墨按 3:4 单独出图,见 Step 2
- 风格一致:沿用暖米宣纸底 + 墨绿 + 香槟金 + 朱砂印章
封面实现方式:单独生成一张 3:4 封面水墨,放进独立的 HTML .cover-card 区块,作为成品首屏。
Step 0.5 — 风格建模(先选风格再拆诗)
在 @references/ink-style-atlas.md 里先完成风格选择:
- 先判诗性:空灵 / 雄浑 / 萧瑟 / 明丽 / 禅寂 / 烟雨 / 豪放 / 边塞
- 选 1 个主风格 + 1 个副风格(70% + 30%)
- 明确技法词:皴法、构图、留白比例、墨层档位
输出一个“风格卡”后再进入拆诗:
- 主风格:____
- 副风格:____
- 皴法:____
- 构图:____
- 留白比例:____
Step 1 — 拆诗
拿到诗后先拆解,为每句输出三样东西(写入卡片内容):
- 意象/画面:这句诗画什么(用于生图 prompt 的 Subject),要具体到「远山+雨+松+茅屋」这种元素级描述。
- 水墨画寓意:画面 + 意境解读(60–100 字),落到情感/心境落点,避免空泛套话。
- 字词注解:挑 2–3 个关键字逐一释义(
<b>空山</b>:幽静少人的山,非「没有山」),最后补一句「句意——…」。
同时确定整诗的结构标签:首联/颔联/颈联/尾联(律诗)或按句分段,用于卡片排序和封面导读。
Step 2 — 生成水墨画(ImageGen)
用 ToolSearch 加载 ImageGen,逐句生图。prompt 模板(参数化 [AUTHOR] [SCENE] [VERSE]):
Traditional Chinese ink wash landscape painting (中国水墨山水画) in the Southern School (南宗) style of poet-painter [AUTHOR]. Pure monochrome black ink on aged rice paper (xuan paper / 宣纸). Hand-painted with traditional Chinese brush showing cun texture strokes like hemp-fiber cun (披麻皴) and flying-white (飞白) dry-brush techniques. Five tones of ink (墨分五色: 焦浓重淡清). Vast empty white space (计白当黑 / 留白) used as sky, clouds, mist. No color, no text, no watermark, no signature, no seal, no frame. Subject: [SCENE]. Asymmetric balance. Mood of [VERSE].
参数:quality=high、background=opaque、output_dir 指向项目 ink-paintings/。尺寸按用途区分:正文句卡图用 size=1024x1536(竖版 2:3,适配竖长句卡);封面图单独按 3:4 生图(如 size=1024x1365),避免被 .cover-art 的 3:4 框裁坏。
在这个基础模板上,必须叠加 @references/ink-style-atlas.md 的风格包(主风格+副风格)与负面约束(禁现代建筑、禁亮色泼彩、禁文字水印)。
⚠️ 并行覆盖坑:一次并行发 N 个 ImageGen 时,多张可能落在同一秒、文件名时间戳相同而互相覆盖。必须串行生成(一张一张来),或在每次调用后立刻 Read 确认落地文件名、发现覆盖立即补生。
生完后逐张 Read 检查:画面是否对题、是否有真水墨质感(皴法/留白/墨色层次)。生成数量应与诗句数一致(绝句 4、律诗 8、长诗按分段)。
Step 3 — 组装 HTML
用 templates/poem-ink.html 骨架,填入 Step 1 的内容,把水墨画 <img> 指向 ink-paintings/*.png。产出 poem-ink.html 成品页(与 ink-paintings/ 同目录,保证相对路径可加载)。
视觉体系(CSS 变量,勿改):
--bg:#f3eee2; --panel:#fffdf7; --paper:#f6f1e4; --ink:#23211c; --sub:#6b6658;
--line:#e6dcc5; --accent:#2f6b52; --gold:#a9741f; --seal:#b03a2e;
结构顺序:
- cover-card:独立封面卡(3:4 竖版优先),含封面水墨主视觉 + 诗名 + 作者 + 传播钩子;是成品页首屏
- header:朱砂印章(诗名二字,竖排)+ 诗名 + 作者/体裁 + 一句导读(可引名家点评,如苏轼评王维)
- 正文句卡:每张 card = 原文(楷体
STKaiti/KaiTi大字居中 + 拼音小字)→ 水墨画<img>+<figcaption>四字短语 → 「水墨画寓意」→「注解」 - 意象速查表:意象 / 出处 / 象征 三列
- 带走一句:3 条编号要点(全诗点睛 + 艺术手法 + 一句总结)
- footer(来源声明,默认保留):加「原文录自公版…AI 水墨非历史画作复制」的内容来源/版权澄清 + 一行「仅作文化解读,不构成任何专业或投资建议」合规声明
Step 4 — 交付 HTML 成品
默认交付物是 一个自包含的 HTML 成品页:poem-ink.html(填好全部内容 + 引用 ink-paintings/*.png)+ ink-paintings/ 水墨画资源目录。
- 用
present_files打开 HTML 预览;确保 HTML 与ink-paintings/在同一目录结构下,相对路径ink-paintings/xxx.png才能正常加载 - 交付前自检:封面卡在、正文句卡数 = 诗句数、意象速查 + 带走一句齐全、所有
<img>能加载、无横向溢出 - 不做图片导出:水墨画就是 HTML 里的内容素材,交付形态是 HTML 页面本身,不要再截图/导出成 PNG 图卡
Step 5 — 配套文案
- 标题(20 字内,数字钩子 + 诗眼悬念):按当前诗句定制,不复用固定示例。
- 简介(四段式):钩子句 → 要点分层(可含 emoji)→ 收藏引导 → 关注钩子。
- 标签:主题词 + 诗人 + 审美词 + 人群词,5–10 个。
- 合规免责(与 footer 的来源声明分开):简介末尾和成品首屏都要有「仅作文化解读,不构成投资建议/专业建议」等中性合规声明。footer 里的是「内容来源/版权」声明(公版原文 + AI 水墨非历史复制),两者性质不同、互不替代。
Pitfalls
- 用 SVG 手绘水墨画必翻车(简笔画质感),直接走 ImageGen。
- 并行生图时间戳覆盖 → 串行生成 + 每张 Read 确认文件名。
- 印章颜色:朱砂红
#b03a2e,不是绿色。 - 跨 SVG filter 引用在 Safari 不可靠(若仍需 SVG 装饰,每场景独立定义 filter id)。
- deviceScaleFactor 相关提示不再适用——本 skill 不导出图片,不涉及截图缩放参数。
- 原诗若为绝句(4 句)则生 4 张,律诗(8 句)生 8 张,长诗(如《春江花月夜》36 句)需按联或节选分批,避免一次生几十张。
- 封面不能缺失或直接拿横向 header 充当:每首诗都要有独立封面设计,优先 3:4 竖版。
- 只写“in style of 某大师”但没有技法词,会得到泛化风格:必须写皴法+构图+留白比例+负面约束。
- 交付物是 HTML 成品本身:不要跑任何截图/导出脚本,不要把 HTML 再转成图片图卡。
- 付费流程不碰密钥、不自行付款:probe/pay/complete 全部走官方
alipay-bot,密钥与签名由支付宝官方封装。
Verification
- 每张水墨图
Read过目:画面对题、有皴法/留白/墨色层次、无文字水印。 - 风格检查:生成图是否匹配风格卡(主风格+副风格),至少能看出对应皴法或构图特征。
- 封面检查:成品页存在
.cover-card封面区块(诗名+作者+钩子,比例 3:4)。 - HTML 成品在浏览器打开:图片全加载、印章/楷体/配色正确、无横向溢出。
- 交付完整性:封面卡 + 句卡(数量=诗句数)+ 意象速查 + 带走一句齐全。
- 文案标题 ≤20 字、简介含互动钩子、标签 5–10 个、含合规免责声明。
- 付费流程:probe 未付款返回 402 +
Payment-Needed;pay 携Payment-Proof重试;complete 查单验付后触发履约;同一out-shake-no重试不重复扣费。
Files
references/ink-style-atlas.md— 古今水墨风格库(大师图谱 + 题材映射 + prompt 组装器)templates/poem-ink.html— HTML 骨架(含完整 CSS +cover-card封面区块 + 结构占位)scripts/poem-ink-paid.mjs— 支付宝按量付费编排(probe / pay / complete 三阶段,不接触密钥)