免费

流光字标

发光的链接预览卡:居中的字标或标题,下面是用你的颜色由代码画出的层层流光。每行一张 PNG,没有色带。

安装

把“流光字标”技能安装到 ~/.claude/skills/painted-light-og。
下载下面每个文件,保存到这个文件夹:
https://skilllift.pages.dev/packs/painted-light-og/SKILL.zh.md → SKILL.md
https://skilllift.pages.dev/packs/painted-light-og/references/style.md → references/style.md
https://skilllift.pages.dev/packs/painted-light-og/assets/engine.html → assets/engine.html
https://skilllift.pages.dev/packs/painted-light-og/scripts/render.mjs → scripts/render.mjs
https://skilllift.pages.dev/packs/painted-light-og/scripts/check.mjs → scripts/check.mjs
然后读一遍 SKILL.md,告诉我它是做什么的,并提醒我开一个新会话。

解压到 ~/.claude/skills

同一个技能,不同的需求

左边是预览。右边由另一个 Agent 按不同需求制作,它只有安装好的技能,没看过预览。

预览
预览
新需求,由另一个 Agent 制作
新需求,由另一个 Agent 制作

这是按虚构需求做的一次测试。系统字体不同时,字形可能略有差异。

用脚本生成发光感的链接预览图,不用图像模型。居中的字标或标题下方,是由冷暖过渡的流光:代码按种子生成多层流动光带,带柔和颗粒和纵深,每行都用用户给的 2 到 4 个颜色画出不同的画面,并经过测量确认没有色带。输入一个名称加一个标题,或一份 CSV、JSON 列表,每行输出一张 1200x630 的 PNG,外加一张 1600x900 的副本。当有人要为产品做 Open Graph 图、链接预览图、社交分享卡,并且想要鲜明发光的样子时使用;有人点名要这个风格时也用。

交付前必须通过

  • 在最终文件夹上运行 node scripts/check.mjs 退出码为 0,--approved 指向确认过的文字。
  • 我看过 600 宽的总览图,也至少看过一张原尺寸卡片。
  • 流光看起来是画出来的、有层次,没有肉眼可见的台阶,每张都由暖到冷。
  • 所有文字都是用户确认过的,每张卡只用一种语言。
  • 虚构、示例或测试内容都带有 notice。
  • 没有使用真实品牌的样子或标志。
  • 推断的文字和假设都已在交付时列出。
阅读完整 SKILL.md
---
name: painted-light-og
description: 用脚本生成发光感的链接预览图,不用图像模型。居中的字标或标题下方,是由冷暖过渡的流光:代码按种子生成多层流动光带,带柔和颗粒和纵深,每行都用用户给的 2 到 4 个颜色画出不同的画面,并经过测量确认没有色带。输入一个名称加一个标题,或一份 CSV、JSON 列表,每行输出一张 1200x630 的 PNG,外加一张 1600x900 的副本。当有人要为产品做 Open Graph 图、链接预览图、社交分享卡,并且想要鲜明发光的样子时使用;有人点名要这个风格时也用。
version: 1.0.0
---

# 流光字标

样式都在 `assets/engine.html` 里。你只提供文字、颜色和种子。不要改引擎:引擎一旦被改动,`scripts/check.mjs` 就判卡片不合格。只有想看具体参数时才需要读 `references/style.md`。

## 需要问的内容

需求里没给的,一次性在一条消息里问完。

| 字段 | 含义 | 上限 | 需求信息太少时 |
|---|---|---|---|
| `name` 必填 | 公司或产品名,只用文字 | 32 个拉丁字符或 16 个汉字 | 照用户写的原样用。真实卡片绝不编名字 |
| `title` 必填,`lead` 为 `wordmark` 时可不填 | 标题,居中。用 `|` 指定换行,每段就是一行。要显示竖线本身,写 `\|` | 72 个拉丁字符或 30 个汉字 | 用用户自己的句子,可以删短。实在没有,就把 `lead` 设为 `wordmark`,`title` 留空,并列为推断内容。用户没说过的话不要写 |
| `lead` 选填 | `headline`:标题大字,名称小字放在上方。`wordmark`:名称大字,标题小字放在下方 | 只能是这两个词之一 | 留空即 `headline`。首页、发布,或者没有标题时用 `wordmark` |
| `notice` 选填 | 小标签,放在深色底板上,用来标明虚构、示例、草稿、测试 | 44 个拉丁字符或 22 个汉字,只有一行,语言要和标题一致 | 真实且已确认的卡片留空。公司是虚构的,必须写 `虚构示例`。标题还没确认,写 `草稿,尚未确认` |
| `seed` 选填 | 决定流光和颗粒。种子和输入都相同,像素就完全相同 | 40 个字符 | 留空,会用文件名当种子,每行都不同。想换一幅画面时才改 |
| `colors` 选填 | 2 到 4 个 `#RRGGBB`,暖色在前,冷色在后。如果给反了会自动调换并提示。光在全强度时色相与这些颜色相差不超过 12 度,由检查脚本强制。颜色之间的过渡很短,并沿色相环走,比如琥珀到紫会经过红和品红,不会经过棕色 | 2 到 4 个,不能更多。首尾两色的冷暖必须有差别,否则这一行会被拒绝 | 留空就用默认色,并在交付时列为假设。不要去猜某个品牌的颜色 |
| `file` 选填 | 输出文件名。不安全的字符会被清理,重名会自动加编号 | 60 个字符 | 留空,由名称和标题生成 |

上限不计空格。

检查脚本的颜色规则(在像素上按 OKLCH 测量):每个输入颜色的色相偏移不超过 12 度;每个颜色至少占亮部光的 24% 除以颜色数量;单块棕色或灰色区域不超过全卡 6%,合计不超过 12%。某一行不合格就换 `seed`,测试中 28 个种子有 24 个通过。仍不行就加一个中间色。

列表用带表头的 CSV,或由对象组成的 JSON 数组。引号、连续两个引号、引号内换行、字节顺序标记和空行都能处理。本包不接受照片。

## 必须拒绝

- 不接受别人的标志,也不接受用任何标志替代文字名称。字段里出现 `logo`,引擎会直接报错。
- 如果用户点名要某家真实公司或品牌的样子,拒绝这一部分,改用本包自己的样式和用户自己的名称、颜色。任何名单都不可能列全,脚本查不出来,必须由你自己判断。把品牌特征描述得很细、其实在仿某个可辨认品牌的请求,以及冒充他人发布的卡片,同样拒绝。
- 示例文字里不要出现或模仿真实公司。用编造的名字,并加上 `notice`。

## 步骤

1. 如果没有 `playwright`,先安装一次:`npm install playwright`,再 `npx playwright install chromium`。如果它装在别处,把 `NODE_PATH` 指向那个 `node_modules`。
2. 按上表写好列表文件。只用用户确认过的文字。
3. 先用小尺寸试一行,每次只渲染一张:
   `node scripts/render.mjs --in list.csv --out cards --row 1 --draft`
4. 看这张草图,调整 `title` 的换行、`colors` 或 `seed`,直到满意。
5. 全部渲染:`node scripts/render.mjs --in list.csv --out cards`。单张也可以:`--name "..." --title "..." --notice "..." --colors "#FF9A3C,#3A5BFF" --out cards`。某一行失败会报告出来,其他行照常渲染,退出码不为零。
6. 检查,并把确认过的文字作为依据:
   `node scripts/check.mjs cards --approved list.csv --sheet cards-600.png`
   报告的问题全部修好,再跑一遍。虚构或示例卡片加上 `--require-notice`。检查脚本在本文件夹里运行,文件改了名也能查,因为每张 PNG 都带着自己的版面记录。PNG 压缩工具会删掉这份记录,所以要先检查、后压缩。
7. 打开 `cards-600.png`,里面是 600 宽下的所有卡片;再至少打开一张原尺寸的卡片。脚本判断不了审美。流光发闷或检查报告发浑,就换一个种子;某一行读着别扭,就用 `|` 调整换行。

笔记本电脑上每行约 2 秒(包含两种尺寸),检查每张不到一秒。多人共用的机器上请加 `nice -n 10`。一次只跑一个渲染,并在前台等它结束。不要启动脱离终端的进程,不要运行全机范围的结束进程命令,也不要运行图像模型。

## 缺信息时怎么办

- 需求太少:复述用户给的事实,什么都不编,并列出每一条由你推断的文字。用户没给的客户、数字、奖项、日期、价格一律不写。
- 没人能回答:按上表的规则继续做,并在交付时列出你的假设。
- 想要更长或更短:文字会自动逐级缩小字号。放不下时会报错,这时删短。
- 没有真实链接:这是图片,不需要链接。
- 单字落单或换行不好:用 `|`。不要修改 PNG,改过像素的卡片过不了检查。
- 颜色太浅:文字后面的光会自动压暗,直到测得可读。如果仍然报对比度低,换深一些的颜色。

## 交付物

- 每行一张 1200x630 的 `名称.png` 和一张 1600x900 的 `名称-16x9.png`,外加记录文件、字号档位和分行结果的 `manifest.json`。

## 交付前检查

- [ ] 在最终文件夹上运行 `node scripts/check.mjs` 退出码为 0,`--approved` 指向确认过的文字。
- [ ] 我看过 600 宽的总览图,也至少看过一张原尺寸卡片。
- [ ] 流光看起来是画出来的、有层次,没有肉眼可见的台阶,每张都由暖到冷。
- [ ] 所有文字都是用户确认过的,每张卡只用一种语言。
- [ ] 虚构、示例或测试内容都带有 `notice`。
- [ ] 没有使用真实品牌的样子或标志。
- [ ] 推断的文字和假设都已在交付时列出。

## 不适用的情况

- 用户需要照片、截图,或者很安静的卡片。
- 颜色必须限定在很窄的一个色相里,因为这个样式需要暖端和冷端。
- 用户想在卡片上放标志,或者要真实品牌的样子。

## 运行要求

Node.js 22 或更高版本,以及带 Chromium 的 Playwright。检查脚本只需要 Node。全程不联网,渲染时会拦截所有网络请求。字体用系统字体栈,备选字体见 `references/style.md`。如果机器上没有中文无衬线字体,渲染会停下来并告诉你该装什么。

用在这些流程里

相似技能