All skills
lijigang avatar

/ljg-card

@656b148
by lijiganglijigang/ljg-skills7.4k stars
845

Content caster (铸). Transforms text into PNG through precise HTML typography and, when the mold needs it, generated raster imagery. Four molds: -l (default) long reading card, -f source-faithful full text, -c comic, -w whiteboard. USE WHEN user says '铸', 'cast', '做成图', '做成卡片', '做成海报', '原文排版', '全文卡片', '漫画', or '白板'.

Use this Skill: https://skilld.dev/gh/lijigang/ljg-skills/ljg-card

This session only. Nothing lands on disk.

referencesmode-full.md

≈2.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

模具:全文(-f)

-f 把完整文稿铸成一张可连续阅读的长 PNG。它的设计对象是版式,不是文字:原稿中的可见字句逐块只出现一次,字符与先后顺序不变;标题、强调、留白与字重只改变读者怎样看见它们。

执行时依次 Read references/taste.md 与 assets/full_template.html。默认生成图数量为 0。原稿自带图片时,补读 references/image-generation.md 的资产身份与来源保真部分;图片仍是 source,不得重生成、重绘或换成概念配图。

读者承诺

  • **第一眼:**看见纯白页面、深黑正文、克制灰阶和非平均留白形成的清楚阅读秩序。
  • **开始读:**标题、正文、引用、列表、代码与脚注各有清楚层级,但没有额外导语、金句卡或解释框打断作者。
  • **读到底:**能逐段回到原稿核对,没有少字、改字、调序、合并、重复或补写。

原文边界

以下变化属于排版,允许发生:

  • 把原稿已有标题、二三级标题映射到 h1、h2、h3。
  • 把原稿已有粗体、斜体、引用、列表、代码、表格、脚注映射到对应 HTML 语义标签。
  • 给某个原稿块添加 .full-key、.opening 等样式类,改变字号、字重、颜色、行距、边线或上下留白。
  • 为 HTML 安全转义字符,只要浏览器读回的 textContent 与原稿块完全相同。

以下变化属于改稿,禁止发生:

  • 摘要、润色、纠错、改标点、同义改写、删节、合并段落、调换顺序。
  • 从正文抽一句再复制成题记、金句、侧栏或结尾大字。
  • 原稿没有标题时补标题;没有导语、小结或过渡句时补写这些内容。
  • 为了版面整齐截短列表、表格、代码、脚注或来源说明。
  • 用 CSS order、浮动或定位让视觉阅读顺序偏离 DOM 与原稿顺序。

原稿已有标题只出现一次:它可以成为大标题,但不能在正文再重复。原稿没有显式层级时,可以给现有文本块不同视觉权重,不能以设计判断改写其文字身份。

来源锁与原文块账本

渲染前锁定一份本地来源:本地文件直接记录路径与 SHA-256;URL 正文或粘贴文本先原样保存到本任务 /tmp 目录,再记录 SHA-256。来源文件在交付前不得变化。

建立 source-ledger.json:每一项对应一个最终可见文本块。块内文字逐字符保留,块的数组顺序就是阅读顺序。

账本只做一种规范化:把 CRLF / CR 行尾转成浏览器 textContent 使用的 LF。不得 trim、折叠连续空格或改全半角;source_sha256 始终针对未规范化的原始来源文件。

{
  "version": 1,
  "source_sha256": "<64 lowercase hex characters>",
  "blocks": [
    { "id": "b001", "text": "原稿标题" },
    { "id": "b002", "text": "第一段原文,标点与空格都保留。" }
  ]
}

HTML 中每个文本块使用同一个 ID:

<main class="full-document">
  <h1 data-source-block="b001">原稿标题</h1>
  <p data-source-block="b002">第一段原文,标点与空格都保留。</p>
</main>
  • data-source-block 只放在叶子文本块上,不能嵌套。
  • 行内 strong、em、code、链接可以位于块内;它们的合并 textContent 仍须与 ledger 完全一致。
  • 列表逐项登记;表格逐个表头与单元格登记;代码块、图注和脚注各自登记。
  • .full-document 内所有可见文字都必须属于某个原文块。纯布局容器、分隔线与无文字来源图片可以不登记。
  • 来源图片使用本地绝对路径、原始比例和语义化 alt;原稿有图注时,图注本身是一个原文块。

全文校验工具

填完模板、截图之前运行:

bun assets/verify-full-text.ts \
  /tmp/<task>/source-ledger.json \
  /tmp/<task>/full.html \
  /tmp/<task>/source.txt

工具同时核对来源 SHA-256、块 ID、块数量、字符、顺序、重复、嵌套块,以及 .full-document 中未登记的可见文字。任一项不一致就停止;不能用人工目测覆盖失败。

验收反例固定为四类:改单字、调序、漏块、重复块。四类中的任意一种都必须让校验工具退出非 0。

版式母语

  • -f 是白底黑字的长文阅读面:画布固定为纯白 #FFFFFF;普通正文为深中性黑 #171717;辅助文字为 #525252;弱信息为 #7A7A7A;规则线为 #E5E5E3。暗朱红 #A74432 只承担少量章节分隔与强调,不成为正文主色。
  • title、headline、章节标题、正文、强调、图注、表头与署名统一优先使用本机已安装的 KingHwa_OldSong。若本机没有该字体,浏览器自动回退:正文落到 Songti SC、STSong、Noto Serif CJK SC、serif;标题类文字落到 PingFang SC、Hiragino Sans GB、Microsoft YaHei、系统 sans。不得联网下载、临时安装或通过远程 @font-face 补齐。code、pre 与 Footer 来源行保留等宽字体,这是字符对齐有语义的唯一例外。
  • 1080px 成品的普通正文不小于 40px,行高为 1.9,有效正文宽度约 896px。正文段距保持 36px;章节上方留白明显更大。铺陈段落可以收紧,不能通过缩小字号或压缩行距减少图片高度。
  • 标题层级为 80/54/44px,开篇与重点段为 44px/1.9。约 390px 手机显示宽度下,40px 正文约等效 14.4px;验收时同时看手机宽度预览与原尺寸切片。长图增高是放大文字的正常代价,不能为压缩高度缩字。
  • strong 与 .full-key 用字重、暗朱红细线或浅色平面强调;不使用高亮荧光、渐变、发光、玻璃拟态或厚阴影。
  • 引用用细竖线和更松的行距;代码与表格用等宽字和浅中性灰平面;列表与引用保持 40px/1.9,不能降成小字;表格为 34px,代码块与脚注为 32px,图注为 30px,这些辅助层级行高不低于 1.7。
  • 版面不放装饰插图、伪印章、英文大字水印、自动编号或模板口号。审美来自比例、字与空白。

assets/full_template.html 已提供固定视觉系统。{{CUSTOM_CSS}} 只用于适配特殊原稿结构,不能覆盖原文边界、把正文缩到不可读,或引入远程资源。

字体完成态看浏览器实际使用结果,不只看 CSS 字体栈:本机已安装 KingHwa_OldSong 时,普通正文、h1 title 与 h2 headline 的 platform font 都应解析到它;未安装时,正文和标题分别落到各自的本地默认栈即可继续。缺失首选字体本身不是失败,远程取字体才是失败。

HTML 表面

模板的正文入口只有一个:{{DOCUMENT_HTML}}。完整原稿按原顺序全部进入 .full-document;Footer 位于正文区之外,不参与原文块校验。

可用语义表面:

  • h1、h2、h3、p.opening
  • strong、em、.full-key
  • ul、ol、blockquote
  • pre、行内 code
  • table、caption、th、td
  • .source-figure、figcaption
  • .footnotes、.footnote、.section-break

替换 {{DOCUMENT_HTML}}、{{CUSTOM_CSS}}、{{LOGO}} 与 {{SOURCE_LINE}} 后,HTML 中不能残留占位符。

截图与验收

bun assets/capture.ts /tmp/<task>/full.html <final.png> 1080 1600 fullpage

交付条件:

  • 全文校验 exit 0,报告的 expected/actual block 数相同。
  • 来源文件的交付后 SHA-256 与账本记录相同。
  • 生成图数量为 0;所有原稿图片均为本地 source 资产,完整、未裁坏、来源身份明确。
  • DOM 无残留占位符、未登记文字、远程字体、远程图片、横向溢出或小于模板脚注等级的正文。
  • 字体检查分别报告普通正文、title 与 headline 的实际 platform font:本机有 KingHwa_OldSong 时三者都使用它;没有时报告各自命中的默认本地字体,不伪称首选字体已生效。
  • 计算样式确认画布为 #FFFFFF、普通正文至少 40px/1.9,正文与背景对比度高于 15:1;只看模板源代码不算完成。
  • PNG 宽 1080px、8-bit RGB;整图检查能看清层级与节奏,重叠切片覆盖全部高度并逐段核对无截断、遮挡、孤行或表格越界。
  • 若全文高度超过单张 PNG 的可靠渲染上限,停止并说明边界;未经用户同意,不得以截断图片冒充全文,也不得擅自改成交付多张。

Source: SKILL.md on GitHub

1 warningtoday5 checks · Risk SAFE
  • Gen Agent Trust Hubtoday

    The skill facilitates content rendering and image capture using Playwright and Bun. It contains a significant capability surface, including command execution and browser automation, which introduces a potential for indirect prompt injection from processed text or URLs. Additionally, an internal audit script uses character code escaping for specific filter tokens.

  • Sockettoday

    No alerts

  • Snyktoday

    Risk: MEDIUM · 1 issue

  • Runlayer6mo

    11 files scanned · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 656b148. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 14 hours ago.

Activeupdated 2 days ago
user_invocable
true
version
7.4.1

README badge

README badge for lijigang/ljg-skills/ljg-card