当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
日本語の概要は準備中です。原文の説明を表示しています。
当使用者说"把这些照片排成一版"、"做一张照片展示海报"、"仿报纸摄影版那种排版"、"这组照片怎么摆"、"做个 photo essay 的版面"时使用。
输入一组照片加署名,分两步:先产出 spread-plan.md(分带、定主次、排序、每带的图注与署名、被舍弃的照片及原因),等确认后再产出单文件 spread.html(照片按需缩放并内联,可打印成 PDF)。这个 skill 不提供固定版式——它给的是带状构图的语法与协议,具体谁大谁小、分几带、怎么排由模型和使用者判断。
每张照片必须有署名,分辨率不足会被拦下。只想把自己拍的 3–9 张按原顺序拼成一张长图、网格或一页 PDF,不要分带主次和署名时,用 photo-series-layout。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
把一组照片排成报纸摄影版那样的展示版面:分带、定主次、justify 到版心两边齐平。
最重要的一条:不要把位置写死。
一张好的照片版面,谁占最大格、分几带、哪张打头,取决于这一组照片本身—— 哪张有决定性瞬间、哪张的留白能接住图注、哪两张放一起会打架。这些是每次都不同的判断, 写成模板就等于把判断替使用者做了,而且做错的概率是百分之百。
所以这里给的是:
下面第三节专门列了"留给判断的"清单。看到那节里的项目,不要去别处找标准答案,就地判断。
不适用于 / Not for:
photo-caption-writer;加拍摄参数边框 → 用 photo-exif-frame;做成极简几何海报 → 用 photo-poster-stylistphoto-series-layout。
反过来,要刊物或展板那样分带、定主次、每带带署名的版面,或者照片超过 9 张,才用这个 skillbento-infographickeynote-deck-builder| 输入 | 必填 | 说明 |
|---|---|---|
| 照片文件 | 是 | 目录或路径清单。先跑 measure_photos.py 量一遍 |
| 署名 | 是 | 每张或每组的拍摄者。没有署名不上版,见边界 |
| 每带一句说明 | 是 | 这一带拍的是什么。写不出来说明这几张不该在一起 |
| 页面尺寸 | 否 | 默认 A3 纵向 297×420mm。海报可给 A2,刊物给 A4 |
| 刊头信息 | 否 | 栏目名、期号、页码。不要用真实出版物的报头,见边界 |
| 强调色 | 否 | 不给就问,或按照片主色定 |
脚本依赖:Python 3 和 Pillow(python3 -m pip install Pillow)。scripts/image_io.py 是和摄影类 skill 共用的读图模块,
要和两个脚本放在同一个目录。
HEIC(iPhone 默认格式)要装 pillow-heif 才读得了。没装时先转一份 JPEG:
sips -s format jpeg IMG_0001.HEIC --out IMG_0001.jpg(macOS 自带,保留 EXIF),plan 里写转出来的文件名。
两个脚本遇到 HEIC 都会报出这条命令,不会静默跳过。
只有两件事需要问,其余从材料读:
这一节是死的。脚本按这个契约工作,不要改结构。
spread-plan.md用 templates/spread-plan.md 起草。这一步不写任何 HTML,不生成 JSON。
写完停下等确认。哪张照片当主角是整件事里最需要使用者拍板的判断, 一步做到底等于把它藏进 HTML 里。
plan.json + spread.html确认之后把计划翻译成 plan.json,跑脚本产出 HTML。
plan.json 的数据契约:
{
"page": { "width_mm": 297, "height_mm": 420, "margin_mm": 18,
"gutter_mm": 3, "dpi": 300 },
"bands": [
{ "caption": "这一带拍的是什么",
"credit": "摄影:某某、某某",
"items": [
{ "type": "photo", "src": "a.jpg" },
{ "type": "stack", "src": ["b.jpg", "c.jpg"] },
{ "type": "text", "width_mm": 38, "title": "…", "byline": "…", "body": "…" }
] }
]
}
三种 item,够表达这一类版面的全部结构:
| type | 是什么 | 宽度怎么定 |
|---|---|---|
photo | 一张照片 | 由长宽比与带高解出 |
stack | 竖向叠放的一组,共用一个宽度 | 由组内各图长宽比与带高解出 |
text | 文字栏(作品自述、创作说明) | 固定 width_mm |
一带之内所有 item 等高、左右顶到版心边缘。给定版心宽 W、天沟 g、
n 个 item,带高 h 由这个方程唯一确定:
h · [ Σ aᵢ + Σ 1/Sⱼ ] = W − (n−1)·g − Σ wₖ + Σ (mⱼ−1)·g / Sⱼ
aᵢ photo 的长宽比(宽/高)
Sⱼ stack 内各图 1/长宽比 之和,mⱼ 为该 stack 的图数
wₖ text 栏的固定宽度
这是这套版面唯一的硬约束。 其余全是判断。
build_spread.py 解这个方程,所以你永远不需要手写任何一个位置或尺寸。
@page 按 plan.json 的页面尺寸设置,浏览器打印即得正确开本的 PDFplan.json 里写错的键、非数字的尺寸会直接报错,不会被静默忽略让这类版面成立的不变量。违反这些,做出来就不是这个东西了; 在这些之内,怎么排都对。
G1 带状堆叠。 版面是若干横带自上而下堆叠;一带之内横向排列、等高、两端顶齐。 不要做成瀑布流或自由拼贴——两端顶齐是这类版面的骨架。
G2 一带一主角。 每带里应当有一个 item 面积明显最大。 三张一样大的照片摆一排,这一带就没有主语。(哪一张当主角是判断,见下一节。)
G3 层级只靠面积。 不加边框、不加阴影、不加圆角、不加白边。 照片之间只有天沟。想强调就给更大的面积,不要靠装饰。
G4 天沟恒定。 全页一个天沟值,横竖相同。带与带之间的间距等于天沟, 或等于天沟的整数倍——不要每处都不一样。
G5 图注归带不归张。 图注贴在它所描述的那一带下方、左对齐,小字号。 一带里若干张照片共用一条图注,说明它们是一组;说不出这组共同讲什么, 就该拆成两带。
G6 署名必留。 每带带署名。多人拍摄按出现顺序列。 署名是事实不是装饰,不能因为版面挤就删掉。
G7 一支强调色。 强调色只给栏目名与大标题,图注与正文用黑。 照片本身已经提供全部色彩,版面再上色就是打架。
G8 文字栏入列。 作品自述这类文字栏是带内的一个 item,与照片等高, 按同一套天沟对齐。不要让文字浮在照片上或压边。
G9 页面家具要轻。 页码、栏目名、期号排在顶部一条细线上下,小字号。 它们是坐标不是内容。
G10 顶到版心。 所有带左右都顶到版心边缘。 不要让某一带比别的窄一截——那看起来像没排完。
看到这一节里的项目,就地判断,不要去找标准答案。 这个 skill 故意不给这些的默认值,因为它们由这一组照片决定。
| 判断项 | 判断依据 |
|---|---|
| 分几带、每带几张 | 内容能不能归成一句话。一带一个主题 |
| 哪张当主角 | 哪张信息最完整、瞬间最强、或留白最能接住图注 |
| 带的顺序 | 通常强的打头、强的收尾,中间给密度。也可以按时间或叙事排 |
| 裁不裁、裁成什么比例 | 裁掉的必须是真的没用的部分。裁法要写进 plan |
| 用不用 stack | 有一张竖构图想占两带高度时用 |
| 要不要文字栏 | 有作品自述或需要展开说明时用 |
| 强调色 | 照片的共同色调、场合、或使用者指定 |
| 字号级差 | 标题与图注拉开三档以上即可,具体值自己定 |
| 页面尺寸 | 由"挂在哪"决定 |
两条判断上的经验,是提示不是规则:
build_spread.py 会按解出的显示尺寸算每张照片需要多少像素:
需要的像素宽 = 显示宽度(mm) ÷ 25.4 × dpi
dpi: 300。屏幕浏览可降到 150阶段一:
先按这组照片排了一版分带方案:
<spread-plan.md 全文>
**我拿不准的:**
- <哪张当主角的取舍>
- <被舍弃的照片及原因>
确认之后我生成 spread.html。
阶段二:
版面已生成:<文件路径>
- 页面:<尺寸>,<n> 带,共 <m> 张
- 主次:<每带的主角是哪张>
- 分辨率:全部通过 / <哪几张不足,缺多少>
- 未用:<没上版的照片及原因>
- 导 PDF:浏览器打开后 Cmd+P,纸张选<尺寸>,边距选无,勾选背景图形
measure_photos.py 拿长宽比与像素,不要把照片本身读进上下文plan.json 里那一带重跑,不重新规划整版references/layout-grammar.md —— 语法逐条的来由,以及带高方程的推导templates/spread-plan.md —— 阶段一骨架templates/spread.html —— 版面语法的 CSS 实现(没有任何写死的位置)scripts/measure_photos.py —— 量长宽比、像素、EXIF 署名,标出不可用的scripts/build_spread.py —— 解带高方程、查分辨率、缩放内联、出 HTMLscripts/image_io.py —— 与摄影类 skill 共用的读图模块(EXIF 方向、ICC、HEIC 提示)。各副本逐字节相同,不要只改这一份三个脚本都有 --selftest,改动后先跑一遍。
| 版本 | 日期 | 变更 | 类型 |
|---|---|---|---|
| 0.1.2 | 2026-10-10 | 分流改指 bento-infographic(launch-summary-panel 已废弃) | patch |
| 0.1.1 | 2026-09-26 | 脚本改走共用 image_io:按 EXIF 方向转正(竖拍不再横躺、带高不再按横图算),保留 ICC、透明铺纸色,HEIC 与缺图给出可读提示;修模板注释里的占位字面量导致整版照片注入两次;改用 argparse 并补 --selftest;单张照片改指 photo-caption-writer / photo-exif-frame / photo-poster-stylist,补与 photo-series-layout 的判别句;注明 Pillow 依赖 | patch |
| 0.1.0 | 2026-08-21 | 初始草稿。协议与语法分离,位置全部由带高方程解出,主次与分带留给判断 | minor |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
日本語の概要は準備中です。原文の説明を表示しています。
当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。
日本語の概要は準備中です。原文の説明を表示しています。
当学生问"招生官会怎么看我的档案"、"我的背景还差什么"、"帮我评估一下现在的申请竞争力"时使用。以顶尖大学招生官的视角通读学生的档案、长期活动与已写下的反思,不问任何前置问题直接产出一份指名道姓的坦诚点评:这份材料的亮点、招生官真实的解读方式、明显的短板与空白、以及接下来最值得做的一到两件事。只读不写,不修改学生的任何数据,也不代写任何申请材料。
日本語の概要は準備中です。原文の説明を表示しています。
当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。不抄现有歌词,不替使用者决定这首歌要说什么。
日本語の概要は準備中です。原文の説明を表示しています。
当想知道一段 AI 回答"哪些能直接用、哪些必须先验证、哪些只能当建议"时使用。按声明类型分四级——低风险草稿材料、观点与策略建议、可查证的事实声明、会改变状态的可执行指令——每级配一句默认处置动作;再按影响半径排序,给出最小的下一步检查。可执行类一律标"不能直接执行;先做代码审阅/沙箱测试/回滚准备",其中破坏性或提权的命令排在最前。教的是一套可复用的复查习惯,不是替使用者把所有内容都核实一遍:本 skill 只分级、排序、定处置,要逐条核实走 ai-output-fact-checker,整段代码要做入库体检走 ai-code-onboarding-checklist。
日本語の概要は準備中です。原文の説明を表示しています。
当拿到一段 AI 生成的代码,还没决定要不要信、要不要跑、要不要往上继续加东西时使用。先做一遍客观体检:行数与嵌套深度、有没有测试、有没有硬编码密钥或遗留 TODO、依赖是不是真实存在、有没有危险调用(eval/exec、shell=True、递归删除、反序列化、提权、外发网络,按正文给的 grep 模式逐类查);再给风险评级和下一步动作。老实写明它查不了算法正确性——体检通过不等于代码是对的。回答里文字、事实和代码混在一起时先用 ai-answer-triage 分级;只审相对已有代码的一份改动用 ai-diff-review-protocol。
日本語の概要は準備中です。原文の説明を表示しています。