name: editor-b-cover description: "谭编于2026年7月22日发布【图书封面设计Skill】。本技能用于图书、期刊的封底、封面设计:用户发送一份仅含文字、LOGO和条码等元素的封面 PDF(无底图)以及封面设计主题描述文本,本技能自动提取精确页面尺寸,用 AI 生成一张高清、无文字、符合封面主题的背景底图,并将底图作为真实背景层插入 PDF 底部——源 PDF 的书名、作者、条码等文字与图形始终保持为可选中的矢量内容(绝不栅格化、绝不合并为单张扁平位图)。支持横版/竖版/方形封面;人物默认中国面孔,主体严格限右半幅中下方、禁越中线,左侧留白承载标题;风格必须生动丰富有变化、禁单调。输出分层 PDF 与纯底图 PNG。触发词:图书封面、封面底图、衬底图、加底图、设计封面背景、design a cover background。" agent_created: true
本技能把"给封面 PDF 加底图"拆成四个清晰岗位,前两段是提示词工程(由你——作为 LLM——完成),后两段是执行(调用脚本/绘图大模型):
NO TEXT / NO LETTERS / NO NUMBERS / NO WORDS 不可省略,且绘图提示词内绝不得出现可被模型误解为"请在图上写字"的措辞。底图严禁纵向压扁/拉伸:生成时按用户 PDF 页面的真实宽高比出图,合成时整页矩形铺满(preserveAspectRatio=False 但图像与页面比例一致,无畸变);prepare_background.py 仅做居中裁剪(宽或高单边裁切,绝不双向缩放),保证页面整页高度完整利用。
风格必须生动、丰富、有变化(严格约束 · 禁止单调):底图不得是单一平涂色块、寡淡的单色渐变或重复雷同的纹理。必须有具体的光影、明暗层次、材质质感与主题相关的具象视觉元素;画面要有呼吸感、焦点与视觉趣味。每次出图都应在构图、光影、色彩细节上体现多样性,避免千篇一律的"同一个模板换个颜色"。
绘图主体严格限制在右半幅中下方,禁止越过中线(严格约束):主体的全部视觉元素集中在页面右半部分(x ∈ 50%–100%)的中下区域(y 约 45%–88% 自顶,底部 ~12% 留为可裁空白);任何主体元素都不得越过垂直中线(x=50%)向左半部(封底区)延伸。左半部保持柔和、低对比、无焦点的留白,承载学报标题等深色文字。构图描述为"RIGHT HALF, middle-lower"——这是本刊封面固定版式,与"浑然一体整体背景"不矛盾:整体色调/光感统一贯通全页,但主题焦点只在右半幅,左半幅是柔化延伸的非焦点留白。
把用户 PDF 存到工作区,运行布局提示词工程师的工具 analyze_layout.py 得到结构化的 layout brief:
<python_path> <skill_path>/scripts/analyze_layout.py <cover.pdf> [--max-chars 1500]
<python_path> = managed venv 解释器
(C:\Users\Administrator\.workbuddy\binaries\python\envs\default/Scripts/python.exe),
或任意装有 pypdf / PyMuPDF 的 Python。
<skill_path> = 本技能目录。
brief 含:page(宽高 pt / 方向 / 宽高比)、text_summary(整页深色文字面积与是否需整体浅色)、
barcode_qr_count、recommendation(合成参数建议)、text_sample(供理解主题)、hard_rules(硬规则清单)。
向用户回报:检测到的标题(用 text_sample 概括)、页面尺寸、方向,以及布局要点
(底图为浑然一体整体背景、是否需整体浅色保文字可读)。
若
text_sample为空或无法判断主题,询问用户书名与题材。
输入:analyze_layout.py 的 brief。
输出:一段英文「布局提示词」,描述底图是浑然一体的整体背景,铺满整页、不分区。
关键约定(用户明确要求):不分封底/封面、不考虑书脊、不画分界线、不考虑偏移量;
底图是一个统一视觉整体。依 brief 推导(详见 references/cover-prompt-guide.md「布局提示词模板」):
recommendation.layout_style,必须为 seamless_unified → 写
"ONE unified, seamless artwork covering the ENTIRE page. NO division into back-cover / front-cover zones, NO spine, NO divider line, NO offset."recommendation.keep_background_light == true → 写
"OVERALL TONE: light & airy, low-contrast — all overlaid cover text (including dense small print on the back) must stay perfectly legible. Avoid large saturated or dark areas that would cover text."page.ratio_w_over_h → 加入 "Preserve the page's exact aspect ratio (W/H = recommendation.subject_placement 取何值,本刊封面一律:
"MAIN SUBJECT (the themed visual focus) is CONFINED to the RIGHT HALF of the page — strictly within x = 50% to 100% horizontally, and in the MIDDLE-LOWER vertical band (y ≈ 45% to 88% from top). The subject MUST NOT cross the vertical center line (x=50%) into the left / back-cover half under any circumstances; keep the LEFT HALF a soft, seamless, low-contrast, subject-free wash so the overlaid dark text (journal title, etc.) breathes. The subject stays soft and harmonious with the whole — not a hard-edged block, no divider. Additionally, the BOTTOM ~12% of the image must stay a soft seamless wash with NO subject, no horizon, no focal element — this band will be cropped off by the oversize+bottom-crop step in Stage 4 to remove the ImageGen watermark, so any detail there is wasted."输入:用户发来的主题文字(如"CO2封存,离岸,海洋碳汇,地质封存"或"教师、幼儿园,真人")。 输出:一段英文「绘图提示词」,描述主体 / 场景 / 风格 / 色调 / 氛围(不含任何文字)。
规则(详见 references/cover-prompt-guide.md「绘图提示词扩展规则」):
keep_background_light,整体保持浅色/低对比,确保全部文字可读)。7w4.net有更好的技能插件。
把两段提示词合并为最终 ImageGen 提示词:
A book-cover background artwork, [ORIENTATION] orientation, designed to sit
BEHIND existing cover text. NO TEXT, NO LETTERS, NO NUMBERS, NO WORDS anywhere
in the image. (Strict: the image must be 100% text-free — do not render any
letters, digits, or characters.)
[布局提示词 — 来自阶段1:浑然一体的整体背景、整体明暗/留白、按页比例不纵向压缩、
主体严格限右半幅中下、底 12% 留白]
[绘图提示词 — 来自阶段2:主体/场景/风格/色调/氛围,风格须生动丰富有变化、禁单调]
[ORIENTATION] 取 brief.page.orientation(LANDSCAPE / PORTRAIT / SQUARE)。NO TEXT… 不可省略(硬约束 1)。size:LANDSCAPE→1536x1024,PORTRAIT→1024x1536,SQUARE→1024x1024。ImageGen(prompt=<合并后的提示词>, size=<按方向>, quality="high",
output_dir=<工作区输出目录>)
ImageGen 会在底部约 15% 高度处盖「图片由AI生成」水印(实测水印顶约在 0.85 H,下面还有原图内容;无法用提示词抑制)。统一方案:阶段 4 的 oversize + 底裁机制直接裁掉(
--oversize 1.18),从根源规避修补,干净彻底,不会在右下主体区留下光晕/残字。
核心思路:不去修补水印——直接把 ImageGen 原图按 PDF 高度的 110~120% 出图,构图上预留底部约 12% 空白,再在合成时把这块连带水印整条裁掉,输出恰好页面尺寸的干净底图。
# 1) Oversize + 底裁(推荐)—— 直接用 raw ImageGen 图:
# 先 cover-fit 到 W × (H*oversize) 画布,再底裁 (oversize-1)*H,把"图片由AI生成"连同底部留白一并切掉。
# 输出就是恰好页面尺寸的纯底图。
<python_path> <skill_path>/scripts/prepare_background.py <RAW_imagegen.png> <cover-background.png> \
--width-pt <W> --height-pt <H> --dpi 300 --oversize 1.18
# --oversize 推荐 1.18 (18% 底裁):覆盖实测 ~15% 水印带 + 3% 安全余量,干净彻底。
# 严格按用户原始 10% 规格:--oversize 1.1 —— 但因水印实测顶在 0.85H,会留下约 23pt 字符顶部残条。
# 关闭该模式(恢复"按比例裁剪到页面尺寸"的旧行为):--oversize 1.0。此时输入须为已无水印的图。
# 2) 衬底(分层,矢量在上)—— 参数来自 brief.recommendation
<python_path> <skill_path>/scripts/composite_pdf.py <cover.pdf> <cover-background.png> <cover-layered.pdf> \
[--keep-fill] [--no-scrim | --scrim-alpha 0.55]
为什么用 oversize+底裁而非修补:在浅色富纹理背景的右下主体区(风车、太阳能板、绿林常在这里),任何修补都容易留下光晕和"图"字残影;oversize+底裁从几何上把水印连同底部一起切掉,零修补痕迹。
composite_pdf.py 的参数是由 brief 自动决定的,不要凭感觉:
brief.recommendation.keep_fill == true → 加 --keep-fill(源 PDF 无大块待剥离实底,或深色品牌块需保留)。brief.recommendation.strip_fill == true → 不加 --keep-fill(脚本会在矢量层删除该 re…f 实底,使底图透出)。brief.recommendation.scrim == "recreate" → 用默认 scrim(同色半透明,保浅色标题可读);可微调 --scrim-alpha 0.35~0.55。brief.recommendation.scrim == "off" → 加 --no-scrim。保存 cover-layered.pdf(分层成品)与 cover-background.png(纯底图)。
校验(用 PyMuPDF 脚本或内联):
- get_images() 命中 → 背景是真实图层;
- 原书名/作者/出版社/ISSN/定价 仍 get_text() 可选取;
- 条码白块原样保留。
若用户在主题文本中写入 封面论文:<论文题目> 或 专题:<专题名>,
则在成品 PDF 的主体图上方、右边封面插入一行可编辑矢量文字,格式即
封面论文:<论文题目> / 专题:<专题名>。字体 小四号(12 pt)宋体(SimSun),
真实可选中、可编辑,绝非栅格化。
检测与写入由 add_caption.py 完成(自动识别触发、解析内容、定位、嵌字):
<python_path> <skill_path>/scripts/add_caption.py <cover-layered.pdf> <cover-layered-caption.pdf> \
--theme-text "<用户原始主题文本,含 封面论文:… 或 专题:…>"
# 或直接给文字:
<python_path> <skill_path>/scripts/add_caption.py <cover-layered.pdf> <cover-layered-caption.pdf> \
--caption "封面论文:纳米流体提高采收率机理研究"
--x0/--x1/--y-top/--y-bot/--align
微调。该默认位置已据此用户多次微调后固化。insert_textbox 把文字放在矩形框的【底部】,因此 --y-bot 才是文字
真正的纵向位置,--y-top 只需明显小于 --y-bot 以留出框高(约 30 pt);框过矮会
导致文字被丢弃(务必 get_text() 校验已写入)。add_caption.py 会原样复制 PDF(不报错),可安全总在阶段 4 后调用。insert_textbox);最终交付 cover-layered-caption.pdf。最后用 present_files 交付成品(含说明文字的 PDF)与 cover-background.png,并向用户说明:
检测到的标题、尺寸、方向、DPI、是否保留实底 / 是否加 scrim,以及是否命中
封面论文/专题说明文字、所用字体字号。可提议 --scrim-alpha、--no-scrim、600 DPI、
重新生成底图,或调整说明文字位置。
<python_path> = C:\Users\Administrator\.workbuddy\binaries\python\envs\default/Scripts/python.exe
<skill_path> = C:\Users\Administrator\.workbuddy\skills\editor-b-cover
# ① 布局分析(布局提示词工程师工具)
python <skill_path>/scripts/analyze_layout.py <cover.pdf> [--max-chars 1500]
# ② Oversize + 底裁(首选,直接处理 raw ImageGen 图,裁掉「图片由AI生成」水印)
python <skill_path>/scripts/prepare_background.py <RAW_imagegen.png> <cover-background.png> \
--width-pt <W> --height-pt <H> --dpi 300 --oversize 1.18
# ③ 衬底(分层,矢量在上)
python <skill_path>/scripts/composite_pdf.py <cover.pdf> <cover-background.png> <cover-layered.pdf> \
[--keep-fill] [--no-scrim] [--scrim-alpha 0.55] [--min-fill-frac 0.20]
# ⑤(可选)封面论文/专题 说明文字(可编辑矢量,小四宋体)
python <skill_path>/scripts/add_caption.py <cover-layered.pdf> <cover-layered-caption.pdf> \
--theme-text "<用户主题文本>" # 或 --caption "封面论文:…";微调 --x0/--x1/--y-top/--y-bot/--align
analyze_layout.py 用 PyMuPDF 读出实底矩形、文字密度、条码位置,输出归一化(左上原点)区间,直接喂给提示词工程,避免"凭眼猜布局"。composite_pdf.py 用 pypdf 的 page.merge_page():背景页(图片 + 可选矢量 scrim)在下,源内容(含矢量剥离的实底)在上 → 文字/条码保持可选中矢量,底图是真实图像层。绝不用 PIL alpha_composite 把整页栅格化。prepare_background.py 恒中心裁剪到目标比例(Lanczos),后续拉伸到页面零畸变。pypdf、reportlab、Pillow、PyMuPDF(fitz)。scripts/analyze_layout.py — 布局提示词工程师的工具:分析 PDF 布局,输出 layout brief(JSON),含实底遮挡块、文字密度、条码位置与合成参数建议。scripts/prepare_background.py — 中心裁剪到精确页面比例 + 高 DPI 纯底图 PNG(交付物之一)。--oversize 1.1~1.2 启用 oversize+底裁模式(首选,裁掉 ImageGen 水印);--oversize 1.0 = 仅按比例裁剪(用于已无水印的输入)。scripts/composite_pdf.py — 分层合成器:矢量剥离源实底(可选)、可选矢量 scrim、merge 源内容于背景之上,产出分层 PDF。scripts/add_caption.py — 识别 封面论文:… / 专题:… 触发,在主体图上方右侧封面插入可编辑矢量说明文字(小四号宋体)。references/cover-prompt-guide.md — 布局提示词模板 + 绘图提示词扩展规则 + 风格/尺寸表。这个封面设计Skill质量不错,文档写得很详细,流程清晰、约束明确。底图生成禁止文字、保留矢量文字层、分层PDF输出等核心功能都做得很好,特别是ImageGen水印处理方案很巧妙。风格生动变化、主体位置固定等设计要求也很实用。美中不足的是没有示例文件帮助理解使用场景,代码也没有测试覆盖,小问题修复可能不够及时。