用途
把一份菜谱转换为依赖图,再将这张图渲染成高分辨率的 Cooking for Engineers 风格 PNG 表格。阅读方式:从左到右,食材行是流(stream),列是阶段(stage),纵向合并的动作单元格表示汇合(join)。
主要能力
- 读取并规范化完整菜谱,包括产量、食材标题、食材预处理、编号步骤、影响执行的备注(notes),以及用户提供的任何链接来源。
- 保留用量、设备、温度、时间、感官完成线索、静置/冷却与上菜步骤。
- 将食材的内联预处理(例如
onion, diced)视为一道操作,除非该食材是以此状态购买的。 - 当来源在不同阶段使用同一食材时,将其拆分为带标签的若干份。
- 构建依赖图(区分全局准备 setup 与食材流和操作),使其可平面化(planar):排列食材行,使每个操作消耗一个连续的行范围;后续汇合覆盖其所合并中间产物的完整范围。
- 用指定 JSON schema 编码布局,再渲染为 4K 宽 PNG。
使用方式
JSON schema 示例:
{
"title": "Recipe name",
"yield": "about 10 servings",
"setup": [
"Butter and flour a loaf pan",
"Preheat oven to 350 deg F (170 deg C)"
],
"ingredients": [
"2 large (250 g) ripe bananas",
"6 Tbsp (90 mL) butter"
],
"columns": [
{
"actions": [
{ "rows": [0, 0], "label": "mash" },
{ "rows": [1, 1], "label": "melt" }
]
},
{
"actions": [
{ "rows": [0, 1], "label": "mix until smooth" }
]
}
]
}
rows 是包含端点的、从零开始的食材行范围。某阶段单元格为空表示该流原样延续。跨越多行的单元格消耗这些食材或已由它们产出的中间产物。将烤盘准备、预热等整道菜的预备条件放入 setup;将烹饪、冷却、装饰与上菜放入动作列中其实际依赖位置。
渲染命令(渲染脚本路径相对本 SKILL.md 解析):
python3 scripts/render_recipe_diagram_png.py /tmp/recipe-diagram.json /tmp/recipe-diagram.png --width 3840
渲染器生成 4K 宽、高度自适应的 PNG,使用本地等宽字体、图形边框、换行标签和真正的纵向合并动作单元格。可通过将 RECIPE_DIAGRAM_FONT 设为 .ttf 或 .ttc 文件来覆盖检测到的字体。如果表格异常密集,增大 --width;不要仅为适配聊天视口而改动依赖图。
流程步骤
- 规范化来源:阅读完整菜谱。当每条与执行相关的来源陈述在图中都有唯一归属时,规范化完成。
- 构建依赖图:区分全局准备与食材流和操作。当每种食材都到达消耗它的每个操作、且所有操作都导向最终结果时,图完整。
- 使图可平面化:安排食材行顺序,使每个操作消耗一个连续行范围。布局完成的条件是同一列内没有动作范围不连续,也没有两个动作范围重叠。
- 编码布局:写一个临时 JSON 文件。标签用祈使句并保持紧凑,但保留执行细节,使用纯字符串。
- 渲染前审计:将 JSON 与来源比对,验证每种食材与份量、每个操作、所有顺序约束与执行细节都恰好出现一次。真实存在的替代方案保留在相应标签中。用
[?]标注来源不确定处,并在图后解释,而不是自行编造解决方案。 - 渲染、检查并返回:运行上述命令。打开生成的 PNG 并检查后再返回:确认完整外边框可见、文本位于单元格内、没有标签重叠或裁切、汇合与行边界明确、缩小时仍可读。以图片附件或清晰文件链接返回 PNG,而不是粘贴 ASCII 表格。如果出现
[?],在图后附一段简短的Uncertainties列表。输出完成的条件是栅格化成功、图像至少 3840 像素宽、且目视检查确认文字与边框清晰。
适用场景
用户要求生成菜谱流程图时。
限制
- 类别、收费、价格、平台、效果等未在上述资料中提供。
- 除上述渲染脚本与字体环境变量外,其他运行环境要求暂未提供。