zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…

, line)\n if h_match:\n if current_title and current_body:\n sections.append({\"title\": current_title, \"body\": current_body.strip()})\n current_title = h_match.group(2)\n current_body = \"\"\n else:\n current_body += line + \"\\n\"\n\n if current_title and current_body:\n sections.append({\"title\": current_title, \"body\": current_body.strip()})\n\n # 为每个章节推荐插图类型\n results = []\n for section in sections:\n text = section[\"title\"] + \" \" + section[\"body\"]\n best_type = \"infographic\" # 默认\n best_score = 0\n\n for type_key, type_def in TYPES.items():\n score = sum(1 for word in type_def[\"trigger_words\"] if word in text)\n if score > best_score:\n best_score = score\n best_type = type_key\n\n # 只为有足够内容的章节生成插图(>50字)\n if len(section[\"body\"]) > 50:\n results.append({\n \"title\": section[\"title\"],\n \"body\": section[\"body\"][:300],\n \"recommended_type\": best_type,\n \"confidence\": best_score,\n })\n\n return results\n\n\ndef build_illust_prompt(section, type_key, style_key):\n \"\"\"构建插图提示词\"\"\"\n type_def = TYPES[type_key]\n style_def = STYLES[style_key]\n\n parts = [\n f\"文章配图插图,16:9横版\",\n type_def['prompt'],\n f\"图解主题:「{section['title']}」\",\n f\"需要可视化的内容:{section['body'][:200]}\",\n style_def['prompt'],\n \"所有标注使用中文,文字清晰可读。构图简洁明了,信息层次分明。配色与文章风格协调,不喧宾夺主。适合嵌入Markdown文章中阅读\",\n ]\n return \",\".join(parts)\n\n\ndef generate_illustrations(md_path, style, ratio, output_dir, type_override=None):\n \"\"\"主生成流程\"\"\"\n if style not in STYLES:\n print(f\"错误: 未知风格 '{style}',可用: {', '.join(STYLES.keys())}\")\n sys.exit(1)\n\n with open(md_path, 'r', encoding='utf-8') as f:\n md_content = f.read()\n\n sections = analyze_article(md_content)\n\n if not sections:\n print(\"文章中未找到适合配图的章节\")\n sys.exit(0)\n\n print(f\"✏️ 文章插图生成\")\n print(f\" 文章: {md_path}\")\n print(f\" 风格: {STYLES[style]['name']} ({style})\")\n print(f\" 比例: {ratio}\")\n print(f\" 识别到 {len(sections)} 个配图位置\")\n print()\n\n # 输出分析结果\n print(\"=== 配图规划 ===\")\n for i, sec in enumerate(sections, 1):\n t = type_override or sec['recommended_type']\n print(f\" {i}. [{TYPES[t]['name']}] {sec['title']} (置信度:{sec['confidence']})\")\n print()\n\n # 创建输出目录\n Path(output_dir).mkdir(parents=True, exist_ok=True)\n\n # 逐张生成\n for i, sec in enumerate(sections, 1):\n t = type_override or sec['recommended_type']\n prompt = build_illust_prompt(sec, t, style)\n output_path = os.path.join(output_dir, f\"illust_{i:02d}_{t}.png\")\n\n print(f\" 生成第{i}/{len(sections)}张: {sec['title']} [{TYPES[t]['name']}]\")\n cmd = [sys.executable, str(CORE_SCRIPT), prompt, \"-r\", ratio, \"-o\", output_path]\n result = subprocess.run(cmd, capture_output=True, text=True)\n if result.returncode != 0:\n print(f\" ⚠️ 失败: {result.stderr[:200]}\")\n else:\n print(f\" ✅ {output_path}\")\n\n print(f\"\\n全部完成!{len(sections)}张插图已保存到 {output_dir}/\")\n\n\ndef list_options():\n print(\"=== 插图类型 (6种) ===\\n\")\n for k, v in TYPES.items():\n print(f\" {k:15s} {v['name']:8s} — 触发词: {', '.join(v['trigger_words'][:4])}\")\n print(\"\\n=== 视觉风格 (8种) ===\\n\")\n for k, v in STYLES.items():\n print(f\" {k:15s} {v['name']}\")\n print()\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 智能文章插图生成器 — 6类型 × 8风格\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 自动分析文章并生成插图\n python zlab_article_illustrator.py article.md --style notion -o images/\n\n # 指定所有插图类型为流程图\n python zlab_article_illustrator.py article.md --type flowchart --style blueprint -o images/\n\n # 查看选项\n python zlab_article_illustrator.py --list\n \"\"\"\n )\n parser.add_argument(\"article\", nargs=\"?\", help=\"Markdown文章路径\")\n parser.add_argument(\"--style\", default=\"notion\", choices=STYLES.keys(), help=\"视觉风格(默认 notion)\")\n parser.add_argument(\"--type\", choices=TYPES.keys(), help=\"强制指定所有插图类型(不指定则自动判断)\")\n parser.add_argument(\"-r\", \"--ratio\", default=\"16:9\", help=\"宽高比(默认 16:9)\")\n parser.add_argument(\"-o\", \"--output\", default=\"illustrations\", help=\"输出目录(默认 illustrations/)\")\n parser.add_argument(\"--list\", action=\"store_true\", help=\"列出所有选项\")\n\n args = parser.parse_args()\n\n if args.list:\n list_options()\n return\n\n if not args.article:\n parser.print_help()\n print(\"\\n错误: 请提供文章文件路径\")\n sys.exit(1)\n\n if not os.path.exists(args.article):\n print(f\"错误: 文件不存在 {args.article}\")\n sys.exit(1)\n\n generate_illustrations(args.article, args.style, args.ratio, args.output, args.type)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":8841,"content_sha256":"6775d74c169b6512b0e7dd5b5d9211840e06461968d7ebb549f9e1d0f8143b41"},{"filename":"scenes/comic/README.md","content":"# 漫画场景\n\n## 概述\n\n知识漫画生成器,**5画风 × 7基调 × 6布局 = 210种组合**。逐页串行生成,参考上一页保持角色和风格一致。\n\n## 快速使用\n\n```bash\n# 日漫风温暖基调\npython scenes/comic/zlab_comic.py story.md --art manga --tone warm -o comic/\n\n# 水墨动作风\npython scenes/comic/zlab_comic.py story.md --art ink-brush --tone action --layout cinematic -o comic/\n\n# 查看所有选项\npython scenes/comic/zlab_comic.py --list\n```\n\n## 画风(5种)\n\n| 画风 | 名称 | 描述 |\n|------|------|------|\n| ligne-claire | 清线 | 统一线条、平涂色彩,欧洲漫画(默认) |\n| manga | 日漫 | 大眼睛、表情丰富、速度线 |\n| realistic | 写实 | 数字绘画、精致渲染 |\n| ink-brush | 水墨 | 中国水墨、笔触晕染 |\n| chalk | 粉笔 | 黑板粉笔、温暖童趣 |\n\n## 基调(7种)\n\n| 基调 | 名称 | 描述 |\n|------|------|------|\n| neutral | 中性 | 平衡理性(默认) |\n| warm | 温暖 | 怀旧温馨 |\n| dramatic | 戏剧 | 高对比紧张 |\n| romantic | 浪漫 | 柔和唯美 |\n| energetic | 活力 | 明亮动感 |\n| vintage | 复古 | 历史做旧 |\n| action | 动作 | 速度线战斗 |\n\n## 布局(6种)\n\n| 布局 | 名称 | 每页格数 | 适用 |\n|------|------|---------|------|\n| standard | 标准 | 4-6格 | 叙事推进(默认) |\n| cinematic | 电影 | 2-4格 | 戏剧时刻 |\n| dense | 密集 | 6-9格 | 技术说明 |\n| splash | 跨页 | 1-2大图 | 关键揭示 |\n| mixed | 混合 | 3-7不等 | 复杂叙事 |\n| webtoon | 条漫 | 3-5竖向 | 手机阅读 |\n\n## 参数\n\n| 参数 | 说明 |\n|------|------|\n| source | 素材Markdown文件(必填) |\n| --art | 画风(默认 ligne-claire) |\n| --tone | 基调(默认 neutral) |\n| --layout | 布局(默认 standard) |\n| -r, --ratio | 宽高比(默认 3:4竖版) |\n| -o, --output | 输出目录(默认 comic/) |\n| --pages | 最大页数(默认 12) |\n| --list | 列出所有选项 |\n\n## 生成逻辑\n\n- 首页用 `text_to_image.py` 定调\n- 后续页用 `image_to_image.py` 参考上一页,保持角色和风格一致\n- 串行生成,不并发\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2146,"content_sha256":"41d4cf541f63548ac1700f2378f9abe197712ca427b6842f619b26d056a48722"},{"filename":"scenes/comic/zlab_comic.py","content":"#!/usr/bin/env python3\n\"\"\"\n知识漫画生成器 (zlab Comic Generator)\n画风 × 基调 × 布局,逐页分镜生成\n底层调用 core/text_to_image.py + core/image_to_image.py\n\nAuthor: 翟星人\n\"\"\"\n\nimport argparse\nimport subprocess\nimport sys\nimport re\nimport os\nfrom pathlib import Path\n\nSKILL_DIR = Path(__file__).parent.parent.parent\nCORE_T2I = SKILL_DIR / \"core\" / \"text_to_image.py\"\nCORE_I2I = SKILL_DIR / \"core\" / \"image_to_image.py\"\n\n# === 三维定义 ===\n\nARTS = {\n \"ligne-claire\": {\n \"name\": \"清线\",\n \"prompt\": \"清晰统一线条,平涂色彩填充,欧洲漫画传统风格(丁丁历险记风),干净利落的黑色轮廓线\"\n },\n \"manga\": {\n \"name\": \"日漫\",\n \"prompt\": \"日本漫画风格,大眼睛角色,表情丰富夸张,速度线和效果线,网点阴影,动感十足\"\n },\n \"realistic\": {\n \"name\": \"写实\",\n \"prompt\": \"数字绘画写实风格,准确人体比例,精致细腻渲染,电影级光影效果\"\n },\n \"ink-brush\": {\n \"name\": \"水墨\",\n \"prompt\": \"中国水墨画风格,毛笔笔触,水墨晕染效果,留白意境,黑白灰为主偶有点缀色\"\n },\n \"chalk\": {\n \"name\": \"粉笔\",\n \"prompt\": \"粉笔画风格,黑板深色背景,彩色粉笔手绘线条,粗糙质感,温暖童趣\"\n },\n}\n\nTONES = {\n \"neutral\": {\n \"name\": \"中性\",\n \"prompt\": \"平衡理性的色调,中性明度,教育性氛围,冷静客观\"\n },\n \"warm\": {\n \"name\": \"温暖\",\n \"prompt\": \"温暖怀旧色调,暖黄暖橙为主,柔和光线,亲切感人\"\n },\n \"dramatic\": {\n \"name\": \"戏剧\",\n \"prompt\": \"高对比戏剧性色调,强烈明暗对比,紧张感,冲击力强\"\n },\n \"romantic\": {\n \"name\": \"浪漫\",\n \"prompt\": \"柔和浪漫色调,粉色紫色为主,装饰性花瓣元素,梦幻唯美\"\n },\n \"energetic\": {\n \"name\": \"活力\",\n \"prompt\": \"明亮高饱和活力色调,动感构图,充满能量和激情\"\n },\n \"vintage\": {\n \"name\": \"复古\",\n \"prompt\": \"复古做旧色调,泛黄胶片质感,历史感,时代真实性\"\n },\n \"action\": {\n \"name\": \"动作\",\n \"prompt\": \"动作场面色调,速度线冲击效果,爆炸光效,战斗视觉张力\"\n },\n}\n\nLAYOUTS = {\n \"standard\": {\n \"name\": \"标准\",\n \"panels\": \"4-6格\",\n \"prompt\": \"标准漫画分格,4到6个格子,大小均匀,叙事节奏平稳\"\n },\n \"cinematic\": {\n \"name\": \"电影\",\n \"panels\": \"2-4格\",\n \"prompt\": \"电影宽银幕分格,2到4个宽幅画面,横向构图,戏剧张力\"\n },\n \"dense\": {\n \"name\": \"密集\",\n \"panels\": \"6-9格\",\n \"prompt\": \"密集分格,6到9个小格子,信息量大,适合技术说明\"\n },\n \"splash\": {\n \"name\": \"跨页\",\n \"panels\": \"1-2大图\",\n \"prompt\": \"跨页大图,1到2个超大画面,视觉冲击力极强,关键时刻\"\n },\n \"mixed\": {\n \"name\": \"混合\",\n \"panels\": \"3-7不等\",\n \"prompt\": \"混合分格,大小不一的格子3到7个,丰富的视觉节奏变化\"\n },\n \"webtoon\": {\n \"name\": \"条漫\",\n \"panels\": \"3-5竖向\",\n \"prompt\": \"竖向条漫布局,3到5个竖向排列的画面,适合手机阅读\"\n },\n}\n\n\ndef parse_source_to_pages(content, max_pages=12):\n \"\"\"将文字素材拆分为漫画页\"\"\"\n pages = []\n\n # 按段落/章节拆分\n paragraphs = re.split(r'\\n{2,}', content.strip())\n\n # 合并短段落,拆分长段落\n buffer = \"\"\n for para in paragraphs:\n para = para.strip()\n if not para:\n continue\n\n # h2/h3标记作为分页点\n if re.match(r'^#{2,3}\\s', para):\n if buffer:\n pages.append(buffer.strip())\n buffer = \"\"\n buffer = para + \"\\n\"\n else:\n buffer += para + \"\\n\"\n # 超过200字分一页\n if len(buffer) > 200:\n pages.append(buffer.strip())\n buffer = \"\"\n\n if buffer:\n pages.append(buffer.strip())\n\n return pages[:max_pages]\n\n\ndef build_comic_prompt(page_content, page_num, total, art_def, tone_def, layout_def):\n \"\"\"构建单页漫画的生图提示词\"\"\"\n parts = [\n f\"知识漫画,第{page_num}页(共{total}页),竖版3:4\",\n art_def['prompt'],\n tone_def['prompt'],\n layout_def['prompt'],\n f\"本页剧情内容:{page_content[:300]}\",\n \"对话气泡中使用中文,文字清晰可读。角色造型一致,表情生动夸张。画面构图饱满但不拥挤,留出气泡空间。分格之间有清晰的边框线分隔。背景适当简化突出人物和对话\",\n ]\n return \",\".join(parts)\n\n\ndef generate_comic(source_path, art, tone, layout, ratio, output_dir, max_pages):\n \"\"\"主生成流程\"\"\"\n if art not in ARTS:\n print(f\"错误: 未知画风 '{art}',可用: {', '.join(ARTS.keys())}\")\n sys.exit(1)\n if tone not in TONES:\n print(f\"错误: 未知基调 '{tone}',可用: {', '.join(TONES.keys())}\")\n sys.exit(1)\n if layout not in LAYOUTS:\n print(f\"错误: 未知布局 '{layout}',可用: {', '.join(LAYOUTS.keys())}\")\n sys.exit(1)\n\n art_def = ARTS[art]\n tone_def = TONES[tone]\n layout_def = LAYOUTS[layout]\n\n # 读取素材\n with open(source_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n # 拆分为页\n pages = parse_source_to_pages(content, max_pages)\n\n print(f\"📖 漫画生成\")\n print(f\" 画风: {art_def['name']} ({art})\")\n print(f\" 基调: {tone_def['name']} ({tone})\")\n print(f\" 布局: {layout_def['name']} ({layout}),{layout_def['panels']}\")\n print(f\" 页数: {len(pages)}\")\n print(f\" 比例: {ratio}\")\n print(f\" 输出: {output_dir}/\")\n print()\n\n # 输出分镜大纲\n print(\"=== 分镜大纲 ===\")\n for i, page in enumerate(pages, 1):\n summary = page[:60].replace('\\n', ' ')\n print(f\" 第{i}页: {summary}...\")\n print()\n\n # 创建输出目录\n Path(output_dir).mkdir(parents=True, exist_ok=True)\n\n # 逐页串行生成(首页text_to_image,后续image_to_image参考上一页)\n prev_page_path = None\n for i, page in enumerate(pages, 1):\n prompt = build_comic_prompt(page, i, len(pages), art_def, tone_def, layout_def)\n output_path = os.path.join(output_dir, f\"page_{i:02d}.png\")\n\n print(f\" 生成第{i}/{len(pages)}页...\")\n\n if i == 1 or prev_page_path is None:\n # 首页:文生图定调\n cmd = [sys.executable, str(CORE_T2I), prompt, \"-r\", ratio, \"-o\", output_path]\n else:\n # 后续页:参考上一页,保持角色和风格一致\n ref_prompt = f\"参考模板图的角色造型、画风和色调,保持完全一致。{prompt}\"\n cmd = [sys.executable, str(CORE_I2I), prev_page_path, ref_prompt, \"-r\", ratio, \"-o\", output_path]\n\n result = subprocess.run(cmd, capture_output=True, text=True)\n if result.returncode != 0:\n print(f\" ⚠️ 第{i}页失败: {result.stderr[:200]}\")\n else:\n print(f\" ✅ {output_path}\")\n prev_page_path = output_path\n\n print(f\"\\n全部完成!{len(pages)}页漫画已保存到 {output_dir}/\")\n\n\ndef list_options():\n print(\"=== 画风 (5种) ===\\n\")\n for k, v in ARTS.items():\n print(f\" {k:15s} {v['name']}\")\n print(\"\\n=== 基调 (7种) ===\\n\")\n for k, v in TONES.items():\n print(f\" {k:15s} {v['name']}\")\n print(\"\\n=== 布局 (6种) ===\\n\")\n for k, v in LAYOUTS.items():\n print(f\" {k:15s} {v['name']:6s} {v['panels']}\")\n print(f\"\\n共 {len(ARTS)} × {len(TONES)} × {len(LAYOUTS)} = {len(ARTS)*len(TONES)*len(LAYOUTS)} 种组合\")\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 知识漫画生成器 — 5画风 × 7基调 × 6布局\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 日漫风温暖基调\n python zlab_comic.py story.md --art manga --tone warm -o comic/\n\n # 水墨动作风\n python zlab_comic.py story.md --art ink-brush --tone action --layout cinematic -o comic/\n\n # 查看所有选项\n python zlab_comic.py --list\n \"\"\"\n )\n parser.add_argument(\"source\", nargs=\"?\", help=\"文字素材Markdown文件\")\n parser.add_argument(\"--art\", default=\"ligne-claire\", choices=ARTS.keys(), help=\"画风(默认 ligne-claire)\")\n parser.add_argument(\"--tone\", default=\"neutral\", choices=TONES.keys(), help=\"基调(默认 neutral)\")\n parser.add_argument(\"--layout\", default=\"standard\", choices=LAYOUTS.keys(), help=\"布局(默认 standard)\")\n parser.add_argument(\"-r\", \"--ratio\", default=\"3:4\", help=\"宽高比(默认 3:4竖版)\")\n parser.add_argument(\"-o\", \"--output\", default=\"comic\", help=\"输出目录(默认 comic/)\")\n parser.add_argument(\"--pages\", type=int, default=12, help=\"最大页数(默认 12)\")\n parser.add_argument(\"--list\", action=\"store_true\", help=\"列出所有选项\")\n\n args = parser.parse_args()\n\n if args.list:\n list_options()\n return\n\n if not args.source:\n parser.print_help()\n print(\"\\n错误: 请提供素材文件路径\")\n sys.exit(1)\n\n if not os.path.exists(args.source):\n print(f\"错误: 文件不存在 {args.source}\")\n sys.exit(1)\n\n generate_comic(args.source, args.art, args.tone, args.layout, args.ratio, args.output, args.pages)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":9740,"content_sha256":"848219f2ef946f9a5e5201ede083e14b9c437ca5805df9cf97071677ff43f800"},{"filename":"scenes/cover/README.md","content":"# 封面图场景\n\n## 概述\n\n五维定制系统:**类型(6) × 配色(9) × 渲染(6) × 文字(4) × 氛围(3) = 3888种组合**\n\n专为文章、公众号、博客封面设计。\n\n## 快速使用\n\n```bash\n# 只需标题,其他自动选择\npython scenes/cover/zlab_cover.py -n \"AI Agent的前世今生\"\n\n# 深色科技风\npython scenes/cover/zlab_cover.py -n \"深入AI Agent\" --type conceptual --palette dark --rendering digital\n\n# 极简风\npython scenes/cover/zlab_cover.py -n \"极简主义\" --type minimal --palette mono --mood subtle\n```\n\n## 五维参数\n\n### 类型 (--type)\n| 值 | 名称 | 说明 |\n|---|------|------|\n| hero | 主视觉 | 大气居中,视觉冲击(默认) |\n| conceptual | 概念隐喻 | 视觉符号表达抽象主题 |\n| typography | 文字排版 | 以字体设计为主 |\n| metaphor | 视觉比喻 | 具象物体比喻抽象概念 |\n| scene | 场景氛围 | 环境渲染,沉浸感 |\n| minimal | 极简留白 | 大面积留白,高级感 |\n\n### 配色 (--palette)\n| 值 | 名称 | 说明 |\n|---|------|------|\n| warm | 暖色调 | 橙红金黄 |\n| elegant | 优雅 | 低饱和,灰粉米白 |\n| cool | 冷色调 | 蓝绿青灰(默认) |\n| dark | 深色 | 深蓝黑灰,高端 |\n| earth | 大地色 | 棕褐橄榄 |\n| vivid | 鲜艳 | 高饱和撞色 |\n| pastel | 粉彩 | 马卡龙色 |\n| mono | 单色 | 同色相深浅 |\n| retro | 复古 | 怀旧暖黄 |\n\n### 渲染 (--rendering)\n| 值 | 名称 | 说明 |\n|---|------|------|\n| flat-vector | 扁平矢量 | 纯色块,简洁线条(默认) |\n| hand-drawn | 手绘 | 手工线条感 |\n| painterly | 绘画 | 油画笔触 |\n| digital | 数字渲染 | 3D光影 |\n| pixel | 像素 | 8-bit复古 |\n| chalk | 粉笔 | 黑板粉笔 |\n\n### 文字 (--text)\n| 值 | 名称 | 说明 |\n|---|------|------|\n| none | 无文字 | 纯视觉 |\n| title-only | 仅标题 | 含主标题(默认) |\n| title-subtitle | 标题+副标题 | 主副标题 |\n| text-rich | 文字丰富 | 标题+要点 |\n\n### 氛围 (--mood)\n| 值 | 名称 | 说明 |\n|---|------|------|\n| subtle | 含蓄 | 克制,留白多 |\n| balanced | 均衡 | 不张扬不克制(默认) |\n| bold | 大胆 | 强烈视觉冲击 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2185,"content_sha256":"e1010c6f928ca9cee94615832a879c93f4d69994059a283ad643537d54cd74b4"},{"filename":"scenes/cover/zlab_cover.py","content":"#!/usr/bin/env python3\n\"\"\"\n封面图生成器 (zlab Cover Image Generator)\n五维定制系统:类型 × 配色 × 渲染 × 文字 × 氛围\n底层调用 core/text_to_image.py\n\nAuthor: 翟星人\n\"\"\"\n\nimport argparse\nimport subprocess\nimport sys\nfrom pathlib import Path\n\nSKILL_DIR = Path(__file__).parent.parent.parent\nCORE_SCRIPT = SKILL_DIR / \"core\" / \"text_to_image.py\"\n\n# === 五维定义 ===\n\nTYPES = {\n \"hero\": {\"name\": \"主视觉\", \"hint\": \"大气主视觉构图,核心元素居中,视觉冲击力强\"},\n \"conceptual\": {\"name\": \"概念隐喻\", \"hint\": \"概念隐喻画面,用视觉符号表达抽象主题\"},\n \"typography\": {\"name\": \"文字排版\", \"hint\": \"以文字排版为主的设计,字体艺术化处理\"},\n \"metaphor\": {\"name\": \"视觉比喻\", \"hint\": \"具象物体比喻抽象概念,创意视觉表达\"},\n \"scene\": {\"name\": \"场景氛围\", \"hint\": \"环境场景渲染,营造沉浸式氛围\"},\n \"minimal\": {\"name\": \"极简留白\", \"hint\": \"大面积留白,极简元素点缀,高级感构图\"},\n}\n\nPALETTES = {\n \"warm\": {\"name\": \"暖色调\", \"hint\": \"暖色调配色,橙红金黄,温暖活力\"},\n \"elegant\": {\"name\": \"优雅\", \"hint\": \"优雅配色,低饱和度,灰粉米白,高级质感\"},\n \"cool\": {\"name\": \"冷色调\", \"hint\": \"冷色调配色,蓝绿青灰,理性冷静\"},\n \"dark\": {\"name\": \"深色\", \"hint\": \"深色系配色,深蓝黑灰,高端神秘\"},\n \"earth\": {\"name\": \"大地色\", \"hint\": \"大地色系,棕褐橄榄,自然质朴\"},\n \"vivid\": {\"name\": \"鲜艳\", \"hint\": \"高饱和鲜艳配色,强对比撞色,活力四射\"},\n \"pastel\": {\"name\": \"粉彩\", \"hint\": \"粉彩马卡龙配色,柔和梦幻\"},\n \"mono\": {\"name\": \"单色\", \"hint\": \"单色系配色,同一色相的深浅变化,统一纯净\"},\n \"retro\": {\"name\": \"复古\", \"hint\": \"复古做旧配色,怀旧暖黄,胶片质感\"},\n}\n\nRENDERINGS = {\n \"flat-vector\": {\"name\": \"扁平矢量\", \"hint\": \"扁平矢量插画风格,纯色块填充,简洁线条\"},\n \"hand-drawn\": {\"name\": \"手绘\", \"hint\": \"手绘插画风格,线条有手工质感,温暖亲切\"},\n \"painterly\": {\"name\": \"绘画\", \"hint\": \"油画/丙烯绘画风格,笔触可见,艺术感强\"},\n \"digital\": {\"name\": \"数字渲染\", \"hint\": \"数字3D渲染风格,光影精致,质感细腻\"},\n \"pixel\": {\"name\": \"像素\", \"hint\": \"像素艺术风格,8-bit复古感\"},\n \"chalk\": {\"name\": \"粉笔\", \"hint\": \"粉笔画风格,黑板或深色纸张背景,粉笔纹理\"},\n}\n\nTEXT_MODES = {\n \"none\": {\"name\": \"无文字\", \"hint\": \"纯视觉画面,不包含任何文字\"},\n \"title-only\": {\"name\": \"仅标题\", \"hint\": \"画面中包含主标题文字,醒目位置\"},\n \"title-subtitle\": {\"name\": \"标题+副标题\", \"hint\": \"包含主标题和副标题文字\"},\n \"text-rich\": {\"name\": \"文字丰富\", \"hint\": \"包含较多文字内容,标题+副标题+要点\"},\n}\n\nMOODS = {\n \"subtle\": {\"name\": \"含蓄\", \"hint\": \"含蓄克制的氛围,留白多,呼吸感强\"},\n \"balanced\": {\"name\": \"均衡\", \"hint\": \"均衡的视觉表达,不过于张扬也不过于克制\"},\n \"bold\": {\"name\": \"大胆\", \"hint\": \"大胆张扬的视觉冲击,高对比,强烈表达\"},\n}\n\n\ndef build_prompt(title, subtitle, type_key, palette_key, rendering_key, text_key, mood_key):\n parts = [\n f\"专业文章封面图,横版16:9构图\",\n TYPES[type_key]['hint'],\n PALETTES[palette_key]['hint'],\n RENDERINGS[rendering_key]['hint'],\n MOODS[mood_key]['hint'],\n ]\n if text_key != \"none\":\n parts.append(f\"画面中包含中文标题「{title}」,字号大而醒目,放在画面视觉中心或黄金分割位置\")\n if subtitle and text_key in (\"title-subtitle\", \"text-rich\"):\n parts.append(f\"副标题「{subtitle}」放在主标题下方,字号较小\")\n parts.append(TEXT_MODES[text_key]['hint'])\n parts.append(\"标题文字清晰可读,笔画完整无乱码,与背景有足够对比度\")\n else:\n parts.append(f\"主题:{title},用视觉元素表达主题意境,不含文字\")\n\n parts.append(\"构图平衡,主体突出,背景不喧宾夺主。高清晰度,专业封面设计水准,适合公众号/博客头图\")\n return \",\".join(parts)\n\n\ndef generate(title, subtitle, type_key, palette_key, rendering_key, text_key, mood_key, ratio, output):\n prompt = build_prompt(title, subtitle, type_key, palette_key, rendering_key, text_key, mood_key)\n\n print(f\"🖼️ 封面图生成\")\n print(f\" 类型: {TYPES[type_key]['name']} ({type_key})\")\n print(f\" 配色: {PALETTES[palette_key]['name']} ({palette_key})\")\n print(f\" 渲染: {RENDERINGS[rendering_key]['name']} ({rendering_key})\")\n print(f\" 文字: {TEXT_MODES[text_key]['name']} ({text_key})\")\n print(f\" 氛围: {MOODS[mood_key]['name']} ({mood_key})\")\n print(f\" 比例: {ratio}\")\n print(f\" 输出: {output}\")\n\n cmd = [sys.executable, str(CORE_SCRIPT), prompt, \"-r\", ratio, \"-o\", output]\n result = subprocess.run(cmd, capture_output=False)\n if result.returncode != 0:\n print(\"生成失败\")\n sys.exit(1)\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 封面图生成器 — 五维定制系统\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 自动选择(只需标题)\n python zlab_cover.py -n \"AI Agent的前世今生\"\n\n # 指定维度\n python zlab_cover.py -n \"深入AI Agent\" --type conceptual --palette dark --rendering digital\n\n # 带副标题\n python zlab_cover.py -n \"Prompt工程\" --subtitle \"从入门到精通\" --text title-subtitle\n\n # 极简风封面\n python zlab_cover.py -n \"极简主义\" --type minimal --palette mono --mood subtle -o cover.png\n \"\"\"\n )\n parser.add_argument(\"-n\", \"--name\", required=True, help=\"文章/封面标题\")\n parser.add_argument(\"--subtitle\", help=\"副标题\")\n parser.add_argument(\"--type\", default=\"hero\", choices=TYPES.keys(), help=\"类型(默认 hero)\")\n parser.add_argument(\"--palette\", default=\"cool\", choices=PALETTES.keys(), help=\"配色(默认 cool)\")\n parser.add_argument(\"--rendering\", default=\"flat-vector\", choices=RENDERINGS.keys(), help=\"渲染风格(默认 flat-vector)\")\n parser.add_argument(\"--text\", default=\"title-only\", choices=TEXT_MODES.keys(), help=\"文字模式(默认 title-only)\")\n parser.add_argument(\"--mood\", default=\"balanced\", choices=MOODS.keys(), help=\"氛围(默认 balanced)\")\n parser.add_argument(\"-r\", \"--ratio\", default=\"16:9\", help=\"宽高比(默认 16:9)\")\n parser.add_argument(\"-o\", \"--output\", help=\"输出文件路径\")\n\n args = parser.parse_args()\n output = args.output or f\"cover_{args.name[:10]}.png\"\n generate(args.name, args.subtitle, args.type, args.palette, args.rendering, args.text, args.mood, args.ratio, output)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":7003,"content_sha256":"a6abbde32f02d76d7c9e7bdc9c583472955ce3ce881f346b5ce48ff85a7e7e33"},{"filename":"scenes/infographic/layouts.json","content":"{\n \"layouts\": {\n \"pyramid\": {\n \"name\": \"金字塔\",\n \"description\": \"层级金字塔,从上到下表示重要性递减\",\n \"prompt_hint\": \"金字塔层级信息图。画面中央一个等腰三角形,从上到下分3-5层,顶层最窄放核心概念,底层最宽放基础要素。每层用不同深浅色块填充,层与层之间有细线分隔。每层左侧或内部标注中文名称,右侧标注简短说明。三角形外侧留白,整体居中构图\",\n \"best_for\": \"层级关系、马斯洛需求、优先级\"\n },\n \"funnel\": {\n \"name\": \"漏斗图\",\n \"description\": \"从宽到窄的漏斗形状,表示筛选/转化过程\",\n \"prompt_hint\": \"漏斗形信息图。画面中央一个从上到下逐层收窄的漏斗,分4-6层。每层用渐变色块填充(顶层最浅底层最深),层内居中标注中文名称和数字。漏斗两侧用虚线引出每层的详细说明。底部用箭头指向最终结果。整体对称居中\",\n \"best_for\": \"转化漏斗、筛选过程、销售管道\"\n },\n \"fishbone\": {\n \"name\": \"鱼骨图\",\n \"description\": \"因果分析图,主干+分支结构\",\n \"prompt_hint\": \"鱼骨图(石川图)信息图。画面中央一条水平主轴线,右端是鱼头位置放核心问题/结果。主轴上方和下方各伸出3-4条45度斜线作为主要原因分支,每条斜线旁标注中文原因类别。每条主分支上再伸出更细的小分支标注具体子因素。整体呈鱼骨骼形态,左密右疏\",\n \"best_for\": \"根因分析、问题诊断\"\n },\n \"venn\": {\n \"name\": \"韦恩图\",\n \"description\": \"重叠圆形表示概念交集\",\n \"prompt_hint\": \"韦恩图信息图。画面中央2-3个大圆形部分重叠,每个圆用不同半透明颜色填充。各圆的独立区域内标注该概念的独有特征,重叠交集区域用高亮色标注共有特征。每个圆外侧上方标注中文概念名称(大字加粗)。圆形之间间距适中,交集面积占每个圆的20-30%\",\n \"best_for\": \"概念交集、共性分析\"\n },\n \"timeline\": {\n \"name\": \"时间线\",\n \"description\": \"横向或纵向时间轴,标注事件节点\",\n \"prompt_hint\": \"时间线信息图。画面中央一条水平轴线贯穿左右,轴线上均匀分布5-8个圆形节点。节点上方和下方交替排列说明卡片(上方放奇数节点、下方放偶数节点),卡片内含日期/阶段名+简短中文说明。节点之间用渐变色轴线连接,从左到右颜色逐渐变化表示时间推进。首尾节点略大突出起止\",\n \"best_for\": \"历史、项目进度、版本演进\"\n },\n \"mind-map\": {\n \"name\": \"思维导图\",\n \"description\": \"中心发散的树状结构\",\n \"prompt_hint\": \"思维导图信息图。画面正中央一个大圆形/圆角矩形放核心主题(大字醒目),从中心向四周发散出4-6条主分支线,每条主分支末端连接一个中等大小的节点标注子主题。每个子主题再向外伸出2-3条细分支连接小节点。分支线条有机弯曲(非直线),不同主分支用不同颜色区分。整体呈放射状均匀分布\",\n \"best_for\": \"头脑风暴、知识梳理\"\n },\n \"circular-flow\": {\n \"name\": \"循环流程\",\n \"description\": \"环形箭头连接的循环过程\",\n \"prompt_hint\": \"循环流程信息图。画面中央4-6个节点沿圆形均匀排列,节点之间用弧形箭头顺时针连接形成闭环。每个节点是圆角矩形或圆形,内部放图标和中文步骤名称。箭头上可标注过渡说明。圆环中心可放循环主题名称。节点大小一致,间距均匀,整体呈圆形对称\",\n \"best_for\": \"循环过程、迭代流程、生命周期\"\n },\n \"comparison\": {\n \"name\": \"对比图\",\n \"description\": \"左右分栏对比,突出差异\",\n \"prompt_hint\": \"左右对比信息图。画面垂直一分为二,中间用分隔线或VS标志分开。左栏和右栏分别用不同主色调(如蓝vs橙),顶部各有一个大标题。每栏内纵向列出4-6个对比要点,每个要点前有图标。相同维度的对比项左右对齐。底部可有总结行。两栏结构完全对称\",\n \"best_for\": \"产品对比、方案比较、优劣分析\"\n },\n \"grid-cards\": {\n \"name\": \"卡片网格\",\n \"description\": \"网格排列的信息卡片\",\n \"prompt_hint\": \"卡片网格信息图。画面上方居中放大标题,下方是2×3或3×3网格排列的卡片。每张卡片是圆角矩形,内部从上到下依次是:图标/小插图、中文标题(加粗)、1-2行说明文字。卡片之间等间距排列,统一大小。每张卡片可用不同的浅色背景区分,但整体色系协调\",\n \"best_for\": \"多主题概览、功能列表\"\n },\n \"layers-stack\": {\n \"name\": \"分层堆叠\",\n \"description\": \"水平分层堆叠,表示技术栈或架构层次\",\n \"prompt_hint\": \"分层堆叠信息图。画面中央4-6个水平矩形层叠排列,从底到顶依次堆叠。每层宽度一致或逐层变窄(倒梯形),用不同颜色填充。每层内居中标注中文层名,左侧或右侧用引线引出该层的详细说明。最底层最基础,最顶层最上层应用。层与层之间有细线分隔或微小间距\",\n \"best_for\": \"技术栈、分层架构、OSI模型\"\n },\n \"iceberg\": {\n \"name\": \"冰山图\",\n \"description\": \"水面上下分区,表面vs深层\",\n \"prompt_hint\": \"冰山信息图。画面中央一座冰山,水平线将画面分为上下两部分。水面上方是冰山露出部分(约占画面1/3),浅蓝色天空背景,标注可见的表象内容。水面下方是冰山水下部分(约占画面2/3),深蓝色海水背景,体积远大于水面上方,标注隐藏的深层内容。水面线处标注分隔标签。水下部分分2-3层逐渐深入\",\n \"best_for\": \"表象vs本质、显性vs隐性\"\n },\n \"bridge\": {\n \"name\": \"桥接图\",\n \"description\": \"问题→解决方案的桥梁结构\",\n \"prompt_hint\": \"桥接信息图。画面左侧是问题/现状区域(红色或灰色调),右侧是方案/目标区域(绿色或蓝色调),中间用一座桥梁图形连接。桥梁上方标注解决方案/路径。左侧区域内列出2-3个痛点,右侧区域内列出2-3个目标。桥梁下方可标注需要跨越的鸿沟/挑战。整体从左到右阅读,箭头指向右侧\",\n \"best_for\": \"问题→方案、现状→目标\"\n },\n \"tree-hierarchy\": {\n \"name\": \"树状层级\",\n \"description\": \"从上到下的树状分类结构\",\n \"prompt_hint\": \"树状层级信息图。画面顶部居中放根节点(最大的圆角矩形),向下分支展开为2-3个第二层节点,每个第二层节点再向下分出2-3个第三层节点。节点之间用直线或折线连接。根节点用深色强调,越往下层颜色越浅。每个节点内标注中文名称。整体呈倒三角树形,层次分明\",\n \"best_for\": \"组织架构、分类体系\"\n },\n \"nested-circles\": {\n \"name\": \"嵌套圆\",\n \"description\": \"同心圆嵌套,由内到外表示影响范围\",\n \"prompt_hint\": \"嵌套同心圆信息图。画面中央3-5个同心圆由内到外层层扩展。最内圈面积最小放核心概念(深色),最外圈面积最大放外围影响(浅色),颜色从内到外逐渐变浅。每圈的环形区域内标注该层级的中文名称。圆的右侧或下方用引线引出每层的详细说明。整体圆心居中\",\n \"best_for\": \"影响范围、关注圈层\"\n },\n \"quadrants\": {\n \"name\": \"四象限\",\n \"description\": \"十字交叉分四个区域\",\n \"prompt_hint\": \"四象限矩阵信息图。画面中央一个十字坐标轴将空间分为四个象限,横轴和纵轴两端各标注维度名称(如紧急/不紧急、重要/不重要)。四个象限用不同浅色背景区分,每个象限内标注象限名称和2-3个代表性条目。坐标原点可放主题名称。整体正方形构图,四象限面积相等\",\n \"best_for\": \"优先级矩阵、SWOT分析\"\n },\n \"scale-balance\": {\n \"name\": \"天平图\",\n \"description\": \"左右两端的天平/秤,表示权衡\",\n \"prompt_hint\": \"天平权衡信息图。画面中央一个天平/秤的图形,左盘和右盘分别放置对比要素。天平支柱顶部标注主题名称。左盘上方列出2-4个优势/利好项(绿色调),右盘上方列出2-4个劣势/风险项(红色调)。天平可倾斜表示偏向某侧,或平衡表示势均力敌。底座标注总结结论\",\n \"best_for\": \"利弊权衡、决策分析\"\n },\n \"journey-path\": {\n \"name\": \"旅程路径\",\n \"description\": \"蜿蜒路径串联里程碑\",\n \"prompt_hint\": \"旅程路径信息图。画面中一条蜿蜒曲折的路径从左下角延伸到右上角(或S形蜿蜒),路径上均匀分布5-7个里程碑节点(圆形或旗帜标志)。每个节点旁标注阶段名称和简短中文说明,交替排列在路径两侧。路径起点标注「起点」,终点标注「目标」。路径用渐变色表示进展,沿途点缀小图标装饰\",\n \"best_for\": \"用户旅程、成长路径\"\n },\n \"flow\": {\n \"name\": \"流程图\",\n \"description\": \"从上到下或从左到右的流程步骤\",\n \"prompt_hint\": \"流程图信息图。画面从上到下(或从左到右)排列4-6个步骤节点,用箭头依次连接。普通步骤用圆角矩形,判断节点用菱形,起止节点用椭圆。每个节点内标注中文步骤名称。判断节点引出「是/否」两条分支。节点之间间距均匀,箭头清晰可见。整体流向一目了然\",\n \"best_for\": \"工作流、决策流程、步骤说明\"\n },\n \"feature-list\": {\n \"name\": \"功能列表\",\n \"description\": \"图标+文字的纵向列表\",\n \"prompt_hint\": \"功能列表信息图。画面顶部居中放大标题,下方纵向排列4-7个功能条目。每个条目水平排列:左侧一个彩色圆形图标,右侧是功能名称(加粗)和1行简短说明。条目之间有细分隔线或适当间距。每个图标用不同颜色区分但色系统一。整体左对齐,列表整齐有序\",\n \"best_for\": \"产品功能、要点列表\"\n },\n \"equation\": {\n \"name\": \"公式图\",\n \"description\": \"A + B = C的公式化表达\",\n \"prompt_hint\": \"公式表达信息图。画面中央水平排列:左侧2-3个输入要素(用图标+中文标签的卡片表示),中间用加号(+)或箭头(→)连接,右侧等号(=)后放输出结果(用更大的卡片突出)。每个要素卡片大小一致,结果卡片略大并用强调色。整体水平居中,公式从左到右阅读流畅\",\n \"best_for\": \"公式分解、组合关系\"\n }\n }\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":10979,"content_sha256":"1d127b2d2de0ae6a17cca5623fe7a33289f13e46f0b72fa881511e12d24d02b1"},{"filename":"scenes/infographic/README.md","content":"# 信息图场景\n\n## 概述\n\n20种布局 × 17种风格 = **340种组合**,覆盖几乎所有信息可视化场景。\n\n## 快速使用\n\n```bash\n# 金字塔 + 手绘风\npython scenes/infographic/zlab_infographic.py -l pyramid -s craft-handmade -n \"标题\" -c \"内容描述\" -o output.png\n\n# 查看所有组合\npython scenes/infographic/zlab_infographic.py --list\n```\n\n## 布局速查(20种)\n\n| 布局 | 名称 | 适用场景 |\n|------|------|---------|\n| pyramid | 金字塔 | 层级关系、优先级 |\n| funnel | 漏斗图 | 转化漏斗、筛选 |\n| fishbone | 鱼骨图 | 根因分析 |\n| venn | 韦恩图 | 概念交集 |\n| timeline | 时间线 | 历史、项目进度 |\n| mind-map | 思维导图 | 知识梳理、头脑风暴 |\n| circular-flow | 循环流程 | 迭代、生命周期 |\n| comparison | 对比图 | 方案比较、优劣分析 |\n| grid-cards | 卡片网格 | 多主题概览 |\n| layers-stack | 分层堆叠 | 技术栈、架构层 |\n| iceberg | 冰山图 | 表象vs本质 |\n| bridge | 桥接图 | 问题→方案 |\n| tree-hierarchy | 树状层级 | 组织架构、分类 |\n| nested-circles | 嵌套圆 | 影响范围、圈层 |\n| quadrants | 四象限 | 优先级矩阵、SWOT |\n| scale-balance | 天平图 | 利弊权衡 |\n| journey-path | 旅程路径 | 用户旅程、成长路径 |\n| flow | 流程图 | 工作流、决策流程 |\n| feature-list | 功能列表 | 产品功能、要点 |\n| equation | 公式图 | 公式分解、组合 |\n\n## 风格速查(17种)\n\n| 风格 | 名称 | 描述 |\n|------|------|------|\n| craft-handmade | 手绘插画 | 手绘线条、纸艺质感(默认) |\n| claymation | 黏土动画 | 3D黏土、定格动画感 |\n| kawaii | 可爱日系 | 大眼Q版、粉彩色 |\n| watercolor | 水彩绘本 | 柔和晕染、童话感 |\n| chalkboard | 粉笔黑板 | 彩色粉笔、黑板质感 |\n| cyberpunk | 赛博朋克 | 霓虹灯光、暗色未来 |\n| bold-graphic | 漫画波普 | 粗线条、网点、高对比 |\n| aged-academia | 复古学术 | 泛黄素描、手稿感 |\n| corporate | 商务扁平 | 矢量人物、鲜艳填充 |\n| technical | 技术蓝图 | 蓝图线条、工程图 |\n| origami | 折纸 | 几何折面、纸张质感 |\n| pixel-art | 像素复古 | 8-bit、怀旧游戏 |\n| wireframe | 线框原型 | 灰度、UI原型 |\n| subway-map | 地铁线路 | 彩色线路站点图 |\n| ikea-manual | 说明书 | 极简线条、步骤图示 |\n| knolling | 整齐平铺 | 俯拍、整齐排列 |\n| lego | 乐高积木 | 积木拼搭、童趣 |\n\n## 参数\n\n| 参数 | 说明 |\n|------|------|\n| -l, --layout | 布局类型(必填) |\n| -s, --style | 视觉风格(默认 craft-handmade) |\n| -n, --name | 标题(必填) |\n| -c, --content | 内容描述(必填) |\n| -r, --ratio | 宽高比(默认 16:9) |\n| -o, --output | 输出路径(必填) |\n| --list | 列出所有布局和风格 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2872,"content_sha256":"e5d898b6b8f4e2afe2881707f7e204fdb72bd83d3d8e446b11c2cd78cba0a30a"},{"filename":"scenes/infographic/styles.json","content":"{\n \"styles\": {\n \"craft-handmade\": {\n \"name\": \"手绘插画\",\n \"description\": \"手绘线条、纸艺质感\",\n \"prompt_suffix\": \"手绘插画风格。铅笔和马克笔质感的线条,线条粗细有变化不完全均匀,有手工绘制的温暖感。颜色用水彩式半透明填充,不追求精确边缘。浅米色/奶白色带纸张纹理的背景。标注文字用手写体风格。整体像一幅精心绘制的手账页面\"\n },\n \"claymation\": {\n \"name\": \"黏土动画\",\n \"description\": \"3D黏土人物,定格动画感\",\n \"prompt_suffix\": \"3D黏土动画风格。所有元素呈现圆润的黏土质感,表面光滑略有指纹痕迹。柔和的漫射光照明,阴影边缘柔软。配色饱和度适中,类似橡皮泥的鲜艳但不刺眼。浅灰色或浅蓝色干净背景。元素像是摆在桌面上的微缩模型,有轻微景深效果\"\n },\n \"kawaii\": {\n \"name\": \"可爱日系\",\n \"description\": \"大眼睛、粉彩色、Q版\",\n \"prompt_suffix\": \"日系可爱卡通风格。圆润Q版造型,大眼睛表情丰富的小角色作为装饰。粉色、浅紫、薄荷绿、浅黄等马卡龙色系配色。圆角矩形和气泡形状的容器。星星、爱心、闪光等可爱小元素点缀。白色或浅粉色背景,整体甜美明亮\"\n },\n \"watercolor\": {\n \"name\": \"水彩绘本\",\n \"description\": \"柔和水彩,童话绘本风\",\n \"prompt_suffix\": \"水彩画风格。颜色在边缘自然渗透晕染,有水彩特有的深浅过渡和水痕效果。配色柔和淡雅,以蓝绿棕为主色调。白色水彩纸背景,纸张纹理隐约可见。线条用淡灰色细线勾勒,不突兀。整体像一页精美的水彩绘本插图\"\n },\n \"chalkboard\": {\n \"name\": \"粉笔黑板\",\n \"description\": \"彩色粉笔,黑板质感\",\n \"prompt_suffix\": \"粉笔黑板风格。深绿色或深灰色黑板纹理背景,边缘可见木质边框。所有图形和文字用彩色粉笔绘制,线条有粉笔特有的粗糙颗粒质感和断续效果。白色粉笔做主要线条,彩色粉笔(黄、蓝、粉、绿)做强调和填充。局部有粉笔灰飘落和擦除痕迹\"\n },\n \"cyberpunk\": {\n \"name\": \"赛博朋克\",\n \"description\": \"霓虹灯光、暗色未来感\",\n \"prompt_suffix\": \"赛博朋克风格。深蓝黑色背景,霓虹蓝(#00F0FF)和霓虹粉(#FF00FF)作为主要发光色。线条和边框带有发光辉光效果(glow),文字有LED显示屏质感。图形元素有全息投影般的半透明效果。网格线条和数据流装饰。整体暗色调高对比,科技感和未来感强烈\"\n },\n \"bold-graphic\": {\n \"name\": \"漫画波普\",\n \"description\": \"漫画风格、网点、高对比\",\n \"prompt_suffix\": \"波普漫画风格。粗黑色轮廓线(3-4px),内部用纯色平涂填充。背景使用漫画网点(Ben-Day dots)效果。配色用红、黄、蓝等高饱和原色,强烈对比。爆炸形状的强调框、锯齿状对话泡。整体像美式漫画的一个画面,视觉冲击力强\"\n },\n \"aged-academia\": {\n \"name\": \"复古学术\",\n \"description\": \"泛黄素描、复古科学感\",\n \"prompt_suffix\": \"复古学术风格。泛黄羊皮纸/牛皮纸背景纹理,边缘有做旧磨损效果。图形用棕褐色墨水细线素描绘制,类似达芬奇手稿或老百科全书插图。标注文字用衬线体,有手写注释感。偶尔点缀红色或深蓝色作为强调。整体有历史厚重感和学术严谨感\"\n },\n \"corporate\": {\n \"name\": \"商务扁平\",\n \"description\": \"扁平矢量人物,鲜艳填充\",\n \"prompt_suffix\": \"现代商务扁平设计风格。纯色块填充的矢量图形,无渐变无阴影。圆角矩形和几何形状为主。配色用2-3种品牌色(蓝色系为主,橙色或绿色做强调)。简洁的线性图标。扁平化人物插图作为装饰。纯白色背景,大面积留白,排版规整专业\"\n },\n \"technical\": {\n \"name\": \"技术蓝图\",\n \"description\": \"蓝图、等距3D、工程图\",\n \"prompt_suffix\": \"技术蓝图风格。深蓝色(#1B2838)背景配白色网格坐标线,图形用白色和浅蓝色线条绘制。标注用等宽字体,有尺寸标线和角度标注的工程制图感。元素可以用等距(isometric)视角呈现3D效果。连接线用虚线和实线区分层级。整体像一张精密的工程图纸\"\n },\n \"origami\": {\n \"name\": \"折纸\",\n \"description\": \"折纸形态,几何感\",\n \"prompt_suffix\": \"折纸艺术风格。所有图形元素呈现纸张折叠的几何面效果,每个面有不同深浅的同色系填充模拟光影。折痕线清晰可见。配色简洁优雅(白色、灰色搭配一个彩色强调色)。浅色背景上投下柔和的阴影。整体像一组精美的折纸艺术品,简约而不简单\"\n },\n \"pixel-art\": {\n \"name\": \"像素复古\",\n \"description\": \"8-bit像素,怀旧游戏\",\n \"prompt_suffix\": \"8-bit像素艺术风格。所有图形由可见的方块像素组成,边缘呈锯齿状阶梯形。配色使用有限色板(16-32色),颜色鲜明饱和。黑色或深色背景。文字使用像素字体。整体像经典红白机/GameBoy游戏画面,充满复古游戏的怀旧感\"\n },\n \"wireframe\": {\n \"name\": \"线框原型\",\n \"description\": \"灰度框图、界面原型\",\n \"prompt_suffix\": \"线框原型风格。纯灰度色调(白、浅灰、中灰、深灰、黑),无彩色。图形元素用细线框表示,填充用灰色色块和交叉线条(placeholder)。文字区域用横线条代替。整体像UI设计师画的低保真线框原型图,简洁克制极度理性\"\n },\n \"subway-map\": {\n \"name\": \"地铁线路\",\n \"description\": \"地铁图风格,彩色线路\",\n \"prompt_suffix\": \"地铁线路图风格。白色背景上用粗彩色线条(红、蓝、绿、橙、紫等)绘制路线,线条只沿水平、垂直和45度角方向延伸。站点用小圆圈标注,换乘站用大圆圈或方形标注。站名用小号中文标注在站点旁。线条交叉处有清晰的上下层关系。整体像一张真实的地铁线路图\"\n },\n \"ikea-manual\": {\n \"name\": \"说明书\",\n \"description\": \"极简线条、组装说明风格\",\n \"prompt_suffix\": \"IKEA说明书风格。极简黑色线条画,无色彩填充(偶尔用浅灰阴影)。简笔画火柴人角色做动作示意。步骤编号用大数字标注(①②③)。箭头指示方向和动作。完全不使用文字说明,纯图示传达信息。白色背景,线条均匀整洁。整体像宜家家具组装手册\"\n },\n \"knolling\": {\n \"name\": \"整齐平铺\",\n \"description\": \"俯拍整齐排列\",\n \"prompt_suffix\": \"Knolling平铺风格。纯俯视角度(正上方90度),所有元素整齐排列成行列网格,彼此之间等间距,与画面边缘平行。每个元素朝同一方向摆放。干净的纯色背景(白色/浅灰/浅木纹)。均匀的环境光照,几乎无阴影。整体像一张强迫症满足的物品整理照\"\n },\n \"lego\": {\n \"name\": \"乐高积木\",\n \"description\": \"乐高积木风格,童趣拼搭\",\n \"prompt_suffix\": \"乐高积木风格。所有元素由乐高积木块拼搭而成,可见积木表面的圆形凸起(studs)。塑料材质光泽感,鲜艳的红黄蓝绿基础色。微距摄影般的浅景深效果。浅色桌面或底板背景。角色用乐高小人仔(minifigure)造型表示。整体童趣十足,像一个精心搭建的乐高作品\"\n }\n }\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":7682,"content_sha256":"f295d77096801a5b2c77344a9cb792841dbd1f0cb53d01ed7ce132ffb6c7ea44"},{"filename":"scenes/infographic/zlab_infographic.py","content":"#!/usr/bin/env python3\n\"\"\"\n信息图生成器 (zlab Infographic Generator)\n支持 20 种布局 × 17 种风格 = 340 种组合\n底层调用 core/text_to_image.py\n\nAuthor: 翟星人\n\"\"\"\n\nimport argparse\nimport json\nimport subprocess\nimport sys\nimport os\nfrom pathlib import Path\n\nBASE_DIR = Path(__file__).parent\nSKILL_DIR = BASE_DIR.parent.parent\nCORE_SCRIPT = SKILL_DIR / \"core\" / \"text_to_image.py\"\nLAYOUTS_FILE = BASE_DIR / \"layouts.json\"\nSTYLES_FILE = BASE_DIR / \"styles.json\"\n\n\ndef load_json(path):\n with open(path, 'r', encoding='utf-8') as f:\n return json.load(f)\n\n\ndef list_options(layouts, styles):\n print(\"=== 可用布局 (20种) ===\\n\")\n for key, layout in layouts.items():\n print(f\" {key:20s} {layout['name']:8s} — {layout['best_for']}\")\n print(f\"\\n=== 可用风格 (17种) ===\\n\")\n for key, style in styles.items():\n print(f\" {key:20s} {style['name']:8s} — {style['description']}\")\n print(f\"\\n共 {len(layouts)} × {len(styles)} = {len(layouts) * len(styles)} 种组合\")\n\n\ndef build_prompt(title, content, layout_def, style_def):\n \"\"\"组装完整提示词\"\"\"\n prompt_parts = [\n f\"专业信息图,{layout_def['name']}布局\",\n layout_def['prompt_hint'],\n f\"大标题「{title}」放在画面顶部居中位置,字号醒目\",\n f\"信息内容:{content}\",\n style_def['prompt_suffix'],\n \"所有文字使用中文,标注清晰可读,笔画完整无乱码。信息层级分明,主次有序。配色协调统一,不超过3-4种主色。高清晰度,专业信息图设计水准\"\n ]\n return \"。\".join(prompt_parts)\n\n\ndef generate(title, content, layout, style, ratio, output):\n layouts = load_json(LAYOUTS_FILE)['layouts']\n styles = load_json(STYLES_FILE)['styles']\n\n if layout not in layouts:\n print(f\"错误: 未知布局 '{layout}'\")\n print(f\"可用: {', '.join(layouts.keys())}\")\n sys.exit(1)\n\n if style not in styles:\n print(f\"错误: 未知风格 '{style}'\")\n print(f\"可用: {', '.join(styles.keys())}\")\n sys.exit(1)\n\n layout_def = layouts[layout]\n style_def = styles[style]\n prompt = build_prompt(title, content, layout_def, style_def)\n\n print(f\"📊 信息图生成\")\n print(f\" 布局: {layout_def['name']} ({layout})\")\n print(f\" 风格: {style_def['name']} ({style})\")\n print(f\" 比例: {ratio}\")\n print(f\" 输出: {output}\")\n print(f\" 提示词: {prompt[:100]}...\")\n\n cmd = [\n sys.executable,\n str(CORE_SCRIPT),\n prompt,\n \"-r\", ratio,\n \"-o\", output\n ]\n\n result = subprocess.run(cmd, capture_output=False)\n if result.returncode != 0:\n print(\"生成失败\")\n sys.exit(1)\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 信息图生成器 — 20种布局 × 17种风格\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 金字塔 + 手绘风\n python zlab_infographic.py -l pyramid -s craft-handmade -n \"AI技术栈\" -c \"顶层AGI,中层大模型,底层算力\" -o ai_stack.png\n\n # 鱼骨图 + 技术蓝图风\n python zlab_infographic.py -l fishbone -s technical -n \"性能瓶颈分析\" -c \"CPU、内存、IO、网络四大分支\" -o perf.png\n\n # 韦恩图 + 水彩风\n python zlab_infographic.py -l venn -s watercolor -n \"全栈工程师\" -c \"前端、后端、DevOps三圈交集\" -o fullstack.png\n\n # 查看所有布局和风格\n python zlab_infographic.py --list\n \"\"\"\n )\n\n parser.add_argument(\"-l\", \"--layout\", help=\"布局类型(20种可选,用 --list 查看)\")\n parser.add_argument(\"-s\", \"--style\", default=\"craft-handmade\", help=\"视觉风格(17种可选,默认 craft-handmade)\")\n parser.add_argument(\"-n\", \"--name\", help=\"信息图标题\")\n parser.add_argument(\"-c\", \"--content\", help=\"信息图内容描述\")\n parser.add_argument(\"-r\", \"--ratio\", default=\"16:9\", help=\"宽高比(默认 16:9)\")\n parser.add_argument(\"-o\", \"--output\", help=\"输出文件路径\")\n parser.add_argument(\"--list\", action=\"store_true\", help=\"列出所有布局和风格\")\n\n args = parser.parse_args()\n\n if args.list:\n layouts = load_json(LAYOUTS_FILE)['layouts']\n styles = load_json(STYLES_FILE)['styles']\n list_options(layouts, styles)\n return\n\n if not all([args.layout, args.name, args.content, args.output]):\n parser.print_help()\n print(\"\\n错误: 必须提供 -l, -n, -c, -o 参数\")\n sys.exit(1)\n\n generate(args.name, args.content, args.layout, args.style, args.ratio, args.output)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":4684,"content_sha256":"068a407f5411900166b83c3a815f078f231d9da549041b395ae6a38692a30844"},{"filename":"scenes/long-image/README.md","content":"# 长图生成规范\n\n生成需要拼接的长图时,采用**叠罗汉式串行生成**,每张图参考上一张图生成,确保风格一致、衔接自然。\n\n## 铁律:执行前必须分析+确认\n\n**收到长图需求后,禁止直接开始生成!必须先完成以下步骤:**\n\n### 第一步:分析提示词结构\n\n仔细阅读提示词,识别以下信息:\n1. **分屏数量**:提示词中有几个明确的段落/模块?\n2. **每屏内容**:每一屏具体要展示什么?\n3. **全局风格**:色调、风格、光影等统一要素\n4. **衔接元素**:段落之间用什么元素过渡?\n\n### 第二步:输出分屏规划表\n\n必须用表格形式输出规划,让用户一目了然:\n\n```markdown\n| 屏数 | 内容概要 | 关键元素 |\n|-----|---------|---------|\n| 1 | 主视觉+标题 | xxx |\n| 2 | xxx特写 | xxx |\n| ... | ... | ... |\n\n**全局风格**:xxx风格、xxx色调、xxx布光\n**输出比例**:3:4\n**预计生成**:N张图 → 拼接为长图\n```\n\n### 第三步:等待用户确认\n\n**必须等用户说\"OK\"、\"开始\"、\"没问题\"后才能开始生成!**\n\n用户可能会:\n- 调整分屏数量\n- 修改某屏内容\n- 补充遗漏的要素\n\n## 核心原则:叠罗汉式串行生成\n\n**为什么用串行而不是并发?**\n- 每张图的顶部颜色需要与上一张图的底部颜色衔接\n- 只有等上一张图生成完成,才能提取其底部色调\n- 串行生成确保每一屏之间的过渡自然无缝\n\n**为什么参考上一张而不是首图?**\n- 参考首图会导致中间屏幕风格跳跃\n- 叠罗汉式参考让风格逐屏延续,过渡更平滑\n- 每张图只需关心与相邻图的衔接\n\n## 生成前校验清单\n\n| 检查项 | 要求 | 示例 |\n|-------|------|------|\n| **比例统一** | 所有分图使用相同 `-r` 参数 | 全部 `-r 3:4` |\n| **风格描述统一** | 使用相同的风格关键词 | 全部 `电影级美食摄影风格` |\n| **色调统一** | 定义主色调范围 | 全部 `深红色、暖棕色、金色` |\n\n## Agent 执行流程(铁律)\n\n```\n1. 收到长图需求\n2. 【分析】仔细阅读提示词,识别分屏结构\n3. 【规划】输出分屏规划表(表格形式)\n4. 【确认】等待用户确认后才开始生成(铁律!)\n5. 定义全局风格变量(主色调、风格词)\n6. 串行生成每一屏:\n a. 首屏:用 text_to_image.py 生成,定调\n b. 第2屏:用 image_to_image.py 参考第1屏生成\n c. 第3屏:用 image_to_image.py 参考第2屏生成\n d. 以此类推...每屏参考上一屏\n7. 每屏生成后等待完成,再生成下一屏(串行,不可并发)\n8. 全部完成后,使用 --blend 20 拼接输出\n```\n\n## 图生图 Prompt 规范\n\n**核心要点:顶部衔接上一张底部**\n\n后续图片的 prompt 必须包含:\n1. **顶部衔接声明**:明确顶部颜色/氛围与上一张底部衔接\n2. **风格继承**:参考上一张图的整体风格、光影\n3. **本屏内容**:描述当前屏幕要展示的内容\n\n**Prompt 模板:**\n```\n参考模板图的整体风格、色调和光影氛围。本屏顶部与上一屏底部自然衔接。{本屏具体内容描述}\n```\n\n**更精确的写法(推荐):**\n```\n参考模板图的{风格}、{色调}、{光影}。顶部延续上一屏底部的{颜色/氛围}。{本屏具体内容描述}\n```\n\n## 分屏位置规范\n\n| 位置 | 处理方式 |\n|------|---------|\n| **首屏** | 顶部正常开始,底部内容自然过渡(无需刻意留白) |\n| **中间屏** | 顶部衔接上一屏底部颜色,底部内容自然过渡 |\n| **尾屏** | 顶部衔接上一屏底部颜色,底部正常收尾 |\n\n**关键:不要预留固定百分比的留白区域,让内容自然过渡即可**\n\n## 执行示例\n\n```bash\n# 步骤1:生成首屏(文生图,定调)\npython .opencode/skills/image-service/scripts/text_to_image.py \"高端美食摄影风格,深红暖棕金色调,电影级布光...\" -r 3:4 -o 01_hero.png\n# 等待完成\n\n# 步骤2:生成第2屏(参考第1屏)\npython .opencode/skills/image-service/scripts/image_to_image.py 01_hero.png \"参考模板图的美食摄影风格、深红暖棕色调、电影级布光。顶部延续上一屏底部的暖色氛围。本屏内容:酥皮特写...\" -r 3:4 -o 02_crisp.png\n# 等待完成\n\n# 步骤3:生成第3屏(参考第2屏)\npython .opencode/skills/image-service/scripts/image_to_image.py 02_crisp.png \"参考模板图的美食摄影风格、深红暖棕色调、电影级布光。顶部延续上一屏底部的色调。本屏内容:牛排特写...\" -r 3:4 -o 03_tenderloin.png\n# 等待完成\n\n# ...以此类推\n\n# 最后:拼接(推荐 blend 20)\npython .opencode/skills/image-service/scripts/merge_long_image.py 01_hero.png 02_crisp.png 03_tenderloin.png ... -o final.png --blend 20\n```\n\n## 铁律\n\n1. **必须串行生成**:每屏生成完成后再生成下一屏,禁止并发\n2. **叠罗汉式参考**:第N屏参考第N-1屏,不是全部参考首屏\n3. **顶部衔接**:每屏的顶部颜色/氛围必须与上一屏底部衔接\n4. **不留固定留白**:不要预留4%/8%等固定留白,让内容自然过渡\n5. **脚本区分**:首屏用 `text_to_image.py`,后续全部用 `image_to_image.py`\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5261,"content_sha256":"a2d6dcbe083f5859fc2feacbc34fb68e13fd212cd8a2e717ebc2a0a29cf2a4ea"},{"filename":"scenes/marketing/README.md","content":"# 营销物料场景\n\n## 概述\n\n营销物料生成器,预设多种产品营销模板,支持海报、主图、九宫格等。\n\n详细模板见 [templates.md](./templates.md)\n\n## 可用模板类型\n\n| 类型 | 说明 |\n|------|------|\n| 产品主图 | 电商主图(1:1)、详情页Banner(16:9) |\n| 元素拆解 | 功能爆炸图、微距特写、材质对比 |\n| 使用场景 | 生活场景、工作场景、使用前后对比 |\n| 营销创意 | 促销海报、对比评测图、九宫格套图 |\n| 多配色展示 | 多SKU横向排列 |\n\n## 风格前缀(5类)\n\n- 科技数码类\n- 生活消费类\n- 时尚潮流类\n- 食品饮品类\n- 母婴教育类\n\n## 使用\n\n目前通过 core/text_to_image.py 配合 templates.md 中的模板手动组装提示词。\n\n```bash\n# 用模板组装prompt后调用\npython core/text_to_image.py \"{根据模板组装的prompt}\" -r 1:1 -o product.png\n```\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":900,"content_sha256":"33c0a3ef67d9a0325db471e69728a338ac9199899d9904d0a80db8e7452d632a"},{"filename":"scenes/marketing/templates.md","content":"# 营销物料提示词模板库\n\n## 通用风格前缀\n\n根据产品类型选择合适的风格前缀,所有提示词必须为中文。\n\n### 科技数码类\n```\n现代极简科技风格,深色渐变背景,霓虹蓝紫光效,金属质感,高级产品摄影级别,\n柔和的环境光和体积光,精致的光影细节,8K超高清渲染\n```\n\n### 生活消费类\n```\n温暖自然的生活美学风格,柔和的自然光线,浅色干净背景,\n细腻质感,日系清新摄影风格,高级感留白构图\n```\n\n### 时尚潮流类\n```\n潮流街头风格,大胆撞色,动态构图,霓虹灯牌,涂鸦元素,\n高对比度,时尚杂志级摄影,充满活力和态度\n```\n\n### 食品饮品类\n```\n美食摄影风格,暖色调打光,微距特写质感,食材新鲜感,\n蒸汽烟雾效果,木质/大理石台面,高级餐厅氛围\n```\n\n### 母婴教育类\n```\n柔和温馨插画风格,马卡龙色系,圆润可爱造型,\n安全感和信任感,明亮柔和的光线,干净清爽\n```\n\n---\n\n## 产品主图模板\n\n### 电商主图(1:1)\n```\n{风格前缀},\n{产品名称}产品正面特写,居中构图,\n纯色渐变背景,产品占画面60%,\n底部有产品名称和核心卖点文字,\n专业产品摄影,商业广告级别\n```\n\n### 详情页Banner(16:9)\n```\n{风格前缀},\n左侧{产品名称}45度角展示,右侧大字标题\"{核心卖点}\",\n副标题\"{补充说明}\",底部3个图标分别代表{卖点1}、{卖点2}、{卖点3},\n信息密度高,专业电商详情页设计\n```\n\n---\n\n## 元素拆解模板\n\n### 功能拆解/爆炸图\n```\n{风格前缀},\n{产品名称}零件分解爆炸图视角,各部件微微分离悬浮在空中,\n每个部件旁有标注线连接到文字说明:\n\"{部件1名称}:{功能说明}\"\n\"{部件2名称}:{功能说明}\"\n\"{部件3名称}:{功能说明}\"\n工程制图美感,白色背景,专业产品拆解展示\n```\n\n### 微距特写\n```\n{风格前缀},\n{产品局部名称}超微距特写,景深极浅只有焦点清晰,\n能看清{材质/工艺/纹理}的精细质感,\n光线从侧面打过来形成明暗对比,\n专业微距摄影,强调工艺细节和品质感\n```\n\n### 材质/工艺对比\n```\n{风格前缀},\n左右分屏对比构图,\n左侧\"{普通材质}\"灰暗粗糙质感,标注\"普通{材质}\",\n右侧\"{高端材质}\"光滑精致质感,标注\"{品牌}{材质}\",\n中间分隔线,底部对比数据图表,\n专业材质对比展示\n```\n\n---\n\n## 使用场景模板\n\n### 生活场景\n```\n{风格前缀},\n{场景描述}(如\"现代简约客厅/咖啡馆窗边/户外草坪\"),\n{用户形象}正在使用{产品名称},表情{愉悦/专注/放松},\n产品自然融入场景,不突兀,\n{时间}的{光线}(如\"午后的暖阳透过窗帘\"),\n生活方式摄影,真实自然,有代入感\n```\n\n### 工作场景\n```\n{风格前缀},\n整洁的办公桌面,{产品名称}放在桌面中央位置,\n旁边有{搭配物品}(如\"笔记本电脑、咖啡杯、绿植\"),\n27寸显示器显示{相关内容},\n俯拍45度角,办公美学摄影\n```\n\n### 对比场景(使用前后)\n```\n{风格前缀},\n左右分屏构图,\n左侧\"使用前\":{痛点场景描述},灰暗色调,人物表情困扰,\n右侧\"使用后\":{解决场景描述},明亮色调,人物表情愉悦,\n{产品名称}在右侧画面中自然出现,\n戏剧性对比,广告创意级别\n```\n\n---\n\n## 营销创意模板\n\n### 促销海报\n```\n{风格前缀},\n大字标题\"{促销信息}\"(如\"限时特惠\"\"新品首发\"),\n{产品名称}居中展示,周围有{装饰元素}(光效/粒子/几何图形),\n价格标签\"{价格信息}\"醒目展示,\n底部\"{行动号召}\"(如\"立即抢购\"\"扫码下单\"),\n电商大促视觉风格,冲击力强\n```\n\n### 对比图/评测图\n```\n{风格前缀},\n顶部标题\"{产品A} vs {产品B}\",\n左右两栏对比布局,\n每栏包含:产品图、名称、{3-5个对比维度}的评分条/数据,\n底部总结栏突出{获胜产品}的优势,\n专业评测信息图风格,数据可视化清晰\n```\n\n### 九宫格套图(1:1 × 9)\n```\n统一风格前缀用于9张图:\n\n图1(封面):{产品名称}+大标题+核心卖点\n图2:产品全貌正面展示\n图3:{卖点1}功能特写\n图4:{卖点2}功能特写 \n图5:使用场景展示\n图6:{卖点3}细节微距\n图7:配件/包装全家福\n图8:用户好评/数据背书\n图9:购买引导+二维码\n```\n\n### 声波/数据可视化\n```\n{风格前缀},\n{数据类型}可视化(如\"声波频谱/性能跑分/用户增长曲线\"),\n{产品名称}或logo在画面中央,\n数据图表从产品向四周发散,\n具体数据标注:\"{数据1}\"、\"{数据2}\"、\"{数据3}\",\n科技感数据可视化风格,信息密度高\n```\n\n---\n\n## 多配色/多SKU模板\n\n### 多配色展示\n```\n{风格前缀},\n{产品名称}{N}种配色横向排列展示,\n从左到右分别是:{颜色1名称}、{颜色2名称}、{颜色3名称},\n每个配色下方标注颜色名称,\n统一角度、统一光线、统一背景,\n产品目录级专业展示\n```\n\n---\n\n## 使用说明\n\n1. 用 `{花括号}` 标注的部分需要根据实际产品替换\n2. 风格前缀从顶部「通用风格前缀」中选择,也可以自定义\n3. 所有模板可以组合使用——先用文生图出基准,再用图生图出变体\n4. 每个模板都遵循 prompt 6要素:主体、动作、环境、细节、风格、色彩\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5515,"content_sha256":"cc70fd18e025cb2c42888d3530c245e07eb36ac7615c723064deefc83caad151"},{"filename":"scenes/slide-deck/README.md","content":"# 幻灯片图场景\n\n## 概述\n\n从Markdown内容生成专业幻灯片图片。4维度组合:**纹理 × 氛围 × 字体 × 密度**,16种预设风格。\n\n## 快速使用\n\n```bash\n# 从Markdown生成\npython scenes/slide-deck/zlab_slide_deck.py article.md --style blueprint -o slides/\n\n# 仅看大纲\npython scenes/slide-deck/zlab_slide_deck.py article.md --outline-only\n\n# 查看所有预设\npython scenes/slide-deck/zlab_slide_deck.py --list\n```\n\n## 预设风格(16种)\n\n| 预设 | 名称 | 适用 | 维度组合 |\n|------|------|------|---------|\n| blueprint | 技术蓝图 | 架构、系统设计 | grid×cool×technical×balanced |\n| chalkboard | 粉笔黑板 | 教育、教程 | organic×warm×handwritten×balanced |\n| corporate | 商务专业 | 投资演示、提案 | clean×professional×geometric×balanced |\n| minimal | 极简 | 高管简报 | clean×neutral×geometric×minimal |\n| notion | Notion风 | 产品演示、SaaS | clean×neutral×geometric×dense |\n| dark-atmospheric | 暗色氛围 | 娱乐、游戏 | clean×dark×editorial×balanced |\n| bold-editorial | 大胆编辑 | 产品发布、主题演讲 | clean×vibrant×editorial×balanced |\n| pixel-art | 像素艺术 | 游戏、开发者 | pixel×vibrant×technical×balanced |\n| scientific | 科学学术 | 医学、化学 | clean×cool×technical×dense |\n| sketch-notes | 手绘笔记 | 教育、教程 | organic×warm×handwritten×balanced |\n| watercolor | 水彩 | 生活、健康 | organic×warm×humanist×minimal |\n| editorial-infographic | 编辑信息图 | 科技解说 | clean×cool×editorial×dense |\n| fantasy-animation | 幻想动画 | 教育故事 | organic×vibrant×handwritten×minimal |\n| vector-illustration | 矢量插画 | 创意、儿童 | clean×vibrant×humanist×balanced |\n| vintage | 复古 | 历史、传记 | paper×warm×editorial×balanced |\n| intuition-machine | 机器直觉 | 技术文档 | clean×cool×technical×dense |\n\n## 参数\n\n| 参数 | 说明 |\n|------|------|\n| markdown | Markdown文件路径(必填) |\n| --style | 预设风格(默认 blueprint) |\n| --slides | 最大页数(默认 20) |\n| -r, --ratio | 宽高比(默认 16:9) |\n| -o, --output | 输出目录(默认 slides/) |\n| --outline-only | 仅输出大纲不生成图 |\n| --list | 列出所有预设 |\n\n## 工作流程\n\n1. 读取Markdown文件\n2. 按h2标题拆分为幻灯片页(自动生成标题页+结尾页)\n3. 提取每页要点\n4. 按预设风格逐页生成图片\n5. 输出到指定目录\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2508,"content_sha256":"4d038e2217566becbce9cf75b55c0f966372edcc5d778e341fa240184fd87c0e"},{"filename":"scenes/slide-deck/zlab_slide_deck.py","content":"#!/usr/bin/env python3\n\"\"\"\n幻灯片图生成器 (zlab Slide Deck Generator)\n从Markdown内容生成专业幻灯片图片\n4维度组合:纹理 × 氛围 × 字体 × 密度,16种预设\n\nAuthor: 翟星人\n\"\"\"\n\nimport argparse\nimport subprocess\nimport sys\nimport re\nimport os\nimport time\nfrom pathlib import Path\n\nSKILL_DIR = Path(__file__).parent.parent.parent\nCORE_SCRIPT = SKILL_DIR / \"core\" / \"text_to_image.py\"\n\n# === 4维度定义 ===\n\nTEXTURES = {\n \"clean\": \"纯净平滑背景,无纹理干扰\",\n \"grid\": \"细微网格背景,技术感\",\n \"organic\": \"有机纹理,自然柔和的肌理\",\n \"pixel\": \"像素化纹理,数字复古感\",\n \"paper\": \"纸张纹理,手工质感\",\n}\n\nATMOSPHERES = {\n \"professional\": \"专业商务氛围,克制沉稳\",\n \"warm\": \"温暖友好氛围,亲和力强\",\n \"cool\": \"冷静理性氛围,蓝灰色调\",\n \"vibrant\": \"鲜艳活力氛围,高饱和配色\",\n \"dark\": \"深色暗色氛围,神秘高端\",\n \"neutral\": \"中性氛围,灰白为主,不偏不倚\",\n}\n\nFONTS = {\n \"geometric\": \"几何感字体风格,现代简洁\",\n \"humanist\": \"人文主义字体风格,优雅可读\",\n \"handwritten\": \"手写体风格,亲切随意\",\n \"editorial\": \"编辑出版字体风格,杂志感\",\n \"technical\": \"技术等宽字体风格,代码感\",\n}\n\nDENSITIES = {\n \"minimal\": \"极简信息密度,大面积留白,每页1-2个要点\",\n \"balanced\": \"均衡信息密度,图文搭配,每页3-4个要点\",\n \"dense\": \"高信息密度,知识卡片感,每页5-8个要点\",\n}\n\n# === 16种预设 ===\n\nPRESETS = {\n \"blueprint\": {\n \"name\": \"技术蓝图\",\n \"texture\": \"grid\", \"atmosphere\": \"cool\", \"font\": \"technical\", \"density\": \"balanced\",\n \"best_for\": \"架构设计、系统设计\"\n },\n \"chalkboard\": {\n \"name\": \"粉笔黑板\",\n \"texture\": \"organic\", \"atmosphere\": \"warm\", \"font\": \"handwritten\", \"density\": \"balanced\",\n \"best_for\": \"教育、教程\"\n },\n \"corporate\": {\n \"name\": \"商务专业\",\n \"texture\": \"clean\", \"atmosphere\": \"professional\", \"font\": \"geometric\", \"density\": \"balanced\",\n \"best_for\": \"投资者演示、提案\"\n },\n \"minimal\": {\n \"name\": \"极简\",\n \"texture\": \"clean\", \"atmosphere\": \"neutral\", \"font\": \"geometric\", \"density\": \"minimal\",\n \"best_for\": \"高管简报\"\n },\n \"notion\": {\n \"name\": \"Notion风\",\n \"texture\": \"clean\", \"atmosphere\": \"neutral\", \"font\": \"geometric\", \"density\": \"dense\",\n \"best_for\": \"产品演示、SaaS\"\n },\n \"dark-atmospheric\": {\n \"name\": \"暗色氛围\",\n \"texture\": \"clean\", \"atmosphere\": \"dark\", \"font\": \"editorial\", \"density\": \"balanced\",\n \"best_for\": \"娱乐、游戏\"\n },\n \"bold-editorial\": {\n \"name\": \"大胆编辑\",\n \"texture\": \"clean\", \"atmosphere\": \"vibrant\", \"font\": \"editorial\", \"density\": \"balanced\",\n \"best_for\": \"产品发布、主题演讲\"\n },\n \"pixel-art\": {\n \"name\": \"像素艺术\",\n \"texture\": \"pixel\", \"atmosphere\": \"vibrant\", \"font\": \"technical\", \"density\": \"balanced\",\n \"best_for\": \"游戏、开发者\"\n },\n \"scientific\": {\n \"name\": \"科学学术\",\n \"texture\": \"clean\", \"atmosphere\": \"cool\", \"font\": \"technical\", \"density\": \"dense\",\n \"best_for\": \"生物、化学、医学\"\n },\n \"sketch-notes\": {\n \"name\": \"手绘笔记\",\n \"texture\": \"organic\", \"atmosphere\": \"warm\", \"font\": \"handwritten\", \"density\": \"balanced\",\n \"best_for\": \"教育、教程\"\n },\n \"watercolor\": {\n \"name\": \"水彩\",\n \"texture\": \"organic\", \"atmosphere\": \"warm\", \"font\": \"humanist\", \"density\": \"minimal\",\n \"best_for\": \"生活方式、健康\"\n },\n \"editorial-infographic\": {\n \"name\": \"编辑信息图\",\n \"texture\": \"clean\", \"atmosphere\": \"cool\", \"font\": \"editorial\", \"density\": \"dense\",\n \"best_for\": \"科技解说、研究\"\n },\n \"fantasy-animation\": {\n \"name\": \"幻想动画\",\n \"texture\": \"organic\", \"atmosphere\": \"vibrant\", \"font\": \"handwritten\", \"density\": \"minimal\",\n \"best_for\": \"教育故事\"\n },\n \"vector-illustration\": {\n \"name\": \"矢量插画\",\n \"texture\": \"clean\", \"atmosphere\": \"vibrant\", \"font\": \"humanist\", \"density\": \"balanced\",\n \"best_for\": \"创意、儿童内容\"\n },\n \"vintage\": {\n \"name\": \"复古\",\n \"texture\": \"paper\", \"atmosphere\": \"warm\", \"font\": \"editorial\", \"density\": \"balanced\",\n \"best_for\": \"历史、传记\"\n },\n \"intuition-machine\": {\n \"name\": \"机器直觉\",\n \"texture\": \"clean\", \"atmosphere\": \"cool\", \"font\": \"technical\", \"density\": \"dense\",\n \"best_for\": \"技术文档、学术\"\n },\n}\n\n\ndef parse_markdown_to_slides(md_content, max_slides=20):\n \"\"\"将Markdown内容拆分为幻灯片页\"\"\"\n slides = []\n\n # 按h2拆分\n sections = re.split(r'^## ', md_content, flags=re.MULTILINE)\n\n # 第一段作为标题页\n if sections[0].strip():\n # 提取h1标题\n h1_match = re.search(r'^# (.+)

zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…

, sections[0], re.MULTILINE)\n title = h1_match.group(1).strip() if h1_match else \"标题页\"\n body = re.sub(r'^# .+

zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…

, '', sections[0], flags=re.MULTILINE).strip()\n slides.append({\"type\": \"title\", \"title\": title, \"body\": body[:200]})\n\n # 后续章节\n for section in sections[1:]:\n lines = section.strip().split('\\n')\n if not lines:\n continue\n sec_title = lines[0].strip()\n sec_body = '\\n'.join(lines[1:]).strip()\n\n # 提取要点(列表项)\n points = re.findall(r'^[-*]\\s+(.+)

zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…

, sec_body, re.MULTILINE)\n body_summary = '\\n'.join(f\"- {p}\" for p in points[:6]) if points else sec_body[:300]\n\n slides.append({\"type\": \"content\", \"title\": sec_title, \"body\": body_summary})\n\n if len(slides) >= max_slides:\n break\n\n # 确保有结尾页\n if slides and slides[-1][\"type\"] != \"ending\":\n slides.append({\"type\": \"ending\", \"title\": \"谢谢\", \"body\": \"感谢观看\"})\n\n return slides\n\n\ndef build_slide_prompt(slide, slide_num, total, preset_def):\n \"\"\"为单页幻灯片构建生图提示词\"\"\"\n texture = TEXTURES[preset_def['texture']]\n atmosphere = ATMOSPHERES[preset_def['atmosphere']]\n font_style = FONTS[preset_def['font']]\n density = DENSITIES[preset_def['density']]\n\n slide_type_hint = {\n \"title\": \"演示文稿标题页。大字标题居中偏上,字号最大最醒目。副标题或作者信息在下方较小字号。背景简洁大气,主体元素不超过3个\",\n \"content\": \"演示文稿内容页。标题在顶部左对齐或居中(字号适中加粗),下方内容区域清晰排布要点。要点可用编号或图标列表,行距宽松易读。可配一个辅助图形/图标在右侧或下方\",\n \"ending\": \"演示文稿结尾页。感谢语或总结语居中放大,简洁收尾。可配一个简约图标或装饰元素。整体留白多,不拥挤\",\n }\n\n type_hint = slide_type_hint.get(slide[\"type\"], slide_type_hint[\"content\"])\n\n parts = [\n f\"专业演示文稿幻灯片,第{slide_num}页(共{total}页),16:9宽屏横版\",\n type_hint,\n f\"标题内容:「{slide['title']}」\",\n ]\n\n if slide[\"body\"]:\n # 截取关键内容\n body_short = slide[\"body\"][:200]\n parts.append(f\"内容要点:{body_short}\")\n\n parts.extend([\n texture,\n atmosphere,\n font_style,\n density,\n \"中文排版,所有文字清晰可读笔画完整。版式专业整洁,对齐规整。配色不超过3种主色,主次分明。16:9宽屏比例,适合投屏演示\",\n ])\n\n return \",\".join(parts)\n\n\ndef generate_slides(md_path, preset_name, max_slides, output_dir, ratio, outline_only=False):\n \"\"\"主生成流程\"\"\"\n if preset_name not in PRESETS:\n print(f\"错误: 未知预设 '{preset_name}'\")\n print(f\"可用: {', '.join(PRESETS.keys())}\")\n sys.exit(1)\n\n preset_def = PRESETS[preset_name]\n\n # 读取Markdown\n with open(md_path, 'r', encoding='utf-8') as f:\n md_content = f.read()\n\n # 拆分为幻灯片\n slides = parse_markdown_to_slides(md_content, max_slides)\n print(f\"📑 幻灯片生成\")\n print(f\" 预设: {preset_def['name']} ({preset_name})\")\n print(f\" 页数: {len(slides)}\")\n print(f\" 输出: {output_dir}/\")\n print()\n\n # 输出大纲\n print(\"=== 大纲 ===\")\n for i, slide in enumerate(slides, 1):\n print(f\" 第{i}页 [{slide['type']}] {slide['title']}\")\n print()\n\n if outline_only:\n print(\"(仅大纲模式,跳过图片生成)\")\n return\n\n # 创建输出目录\n Path(output_dir).mkdir(parents=True, exist_ok=True)\n\n # 逐页生成\n for i, slide in enumerate(slides, 1):\n prompt = build_slide_prompt(slide, i, len(slides), preset_def)\n output_path = os.path.join(output_dir, f\"slide_{i:02d}.png\")\n\n print(f\" 生成第{i}/{len(slides)}页: {slide['title']}\")\n cmd = [sys.executable, str(CORE_SCRIPT), prompt, \"-r\", ratio, \"-o\", output_path]\n result = subprocess.run(cmd, capture_output=True, text=True)\n if result.returncode != 0:\n print(f\" ⚠️ 第{i}页生成失败: {result.stderr[:200]}\")\n else:\n print(f\" ✅ {output_path}\")\n\n print(f\"\\n全部完成!{len(slides)}页幻灯片已保存到 {output_dir}/\")\n\n\ndef list_presets():\n print(\"=== 可用预设 (16种) ===\\n\")\n for key, preset in PRESETS.items():\n dims = f\"{preset['texture']}×{preset['atmosphere']}×{preset['font']}×{preset['density']}\"\n print(f\" {key:25s} {preset['name']:8s} — {preset['best_for']}\")\n print(f\" {'':25s} ({dims})\")\n print()\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 幻灯片图生成器 — 16种预设风格\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 从Markdown生成幻灯片\n python zlab_slide_deck.py article.md --style blueprint -o slides/\n\n # 仅看大纲\n python zlab_slide_deck.py article.md --outline-only\n\n # 指定页数上限\n python zlab_slide_deck.py article.md --style corporate --slides 12 -o slides/\n\n # 查看所有预设\n python zlab_slide_deck.py --list\n \"\"\"\n )\n parser.add_argument(\"markdown\", nargs=\"?\", help=\"Markdown文件路径\")\n parser.add_argument(\"--style\", default=\"blueprint\", help=\"预设风格(默认 blueprint,用 --list 查看)\")\n parser.add_argument(\"--slides\", type=int, default=20, help=\"最大页数(默认 20)\")\n parser.add_argument(\"-r\", \"--ratio\", default=\"16:9\", help=\"宽高比(默认 16:9)\")\n parser.add_argument(\"-o\", \"--output\", default=\"slides\", help=\"输出目录(默认 slides/)\")\n parser.add_argument(\"--outline-only\", action=\"store_true\", help=\"仅输出大纲,不生成图片\")\n parser.add_argument(\"--list\", action=\"store_true\", help=\"列出所有预设\")\n\n args = parser.parse_args()\n\n if args.list:\n list_presets()\n return\n\n if not args.markdown:\n parser.print_help()\n print(\"\\n错误: 请提供Markdown文件路径\")\n sys.exit(1)\n\n if not os.path.exists(args.markdown):\n print(f\"错误: 文件不存在 {args.markdown}\")\n sys.exit(1)\n\n generate_slides(args.markdown, args.style, args.slides, args.output, args.ratio, args.outline_only)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":11573,"content_sha256":"bc880c9ea62bc530a4812d819422bbba278b3f7bdeb99d0b0ca0ef14cd3fcb99"},{"filename":"scenes/xhs/README.md","content":"# 小红书图场景\n\n## 概述\n\n小红书信息图系列生成器,将内容拆解为1-10张卡片。**9风格 × 6布局 = 54种组合**。串行生成保持系列风格一致。\n\n## 快速使用\n\n```bash\n# 可爱风 + 均衡布局\npython scenes/xhs/zlab_xhs_images.py article.md --style cute --layout balanced -o xhs/\n\n# Notion风 + 密集布局\npython scenes/xhs/zlab_xhs_images.py article.md --style notion --layout dense -o xhs/\n\n# 查看选项\npython scenes/xhs/zlab_xhs_images.py --list\n```\n\n## 风格(9种)\n\n| 风格 | 名称 | 描述 |\n|------|------|------|\n| cute | 可爱卡通 | 圆润造型、粉黄配色(默认) |\n| fresh | 清新自然 | 薄荷绿、天蓝、植物装饰 |\n| warm | 温暖治愈 | 暖黄暖橙、毛绒质感 |\n| bold | 大胆撞色 | 荧光色、强对比 |\n| minimal | 极简 | 黑白灰、大留白 |\n| retro | 复古 | 做旧、泛黄胶片 |\n| pop | 波普 | 漫画网点、鲜艳原色 |\n| notion | Notion风 | 白底、线条图标 |\n| chalkboard | 粉笔黑板 | 深绿黑板、粉笔手绘 |\n\n## 布局(6种)\n\n| 布局 | 名称 | 密度 | 适用 |\n|------|------|------|------|\n| sparse | 稀疏 | 1-2点 | 封面、金句 |\n| balanced | 均衡 | 3-4点 | 常规内容(默认) |\n| dense | 密集 | 5-8点 | 干货总结 |\n| list | 列表 | 4-7项 | 清单、排行 |\n| comparison | 对比 | 双栏 | 对比、优劣 |\n| flow | 流程 | 3-6步 | 教程、流程 |\n\n## 参数\n\n| 参数 | 说明 |\n|------|------|\n| source | 内容文件路径(必填) |\n| --style | 风格(默认 cute) |\n| --layout | 布局(默认 balanced) |\n| -o, --output | 输出目录(默认 xhs/) |\n| --cards | 最大卡片数(默认 10) |\n| --list | 列出所有选项 |\n\n## 生成逻辑\n\n- 自动拆分内容为多张卡片(封面+内容)\n- 首张用 `text_to_image.py` 定调\n- 后续用 `image_to_image.py` 参考上一张,保持系列一致\n- 默认比例 3:4 竖版\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1929,"content_sha256":"da6e68e7db55123fbf5496c752ed3325db5242da2c13bb5a76ac2a04326d5415"},{"filename":"scenes/xhs/zlab_xhs_images.py","content":"#!/usr/bin/env python3\n\"\"\"\n小红书信息图生成器 (zlab XHS Images Generator)\n将内容拆解为1-10张卡片风格信息图\n风格 × 布局 二维系统\n\nAuthor: 翟星人\n\"\"\"\n\nimport argparse\nimport subprocess\nimport sys\nimport re\nimport os\nfrom pathlib import Path\n\nSKILL_DIR = Path(__file__).parent.parent.parent\nCORE_T2I = SKILL_DIR / \"core\" / \"text_to_image.py\"\nCORE_I2I = SKILL_DIR / \"core\" / \"image_to_image.py\"\n\n# === 风格(视觉美学)===\n\nXHS_STYLES = {\n \"cute\": {\n \"name\": \"可爱卡通\",\n \"prompt\": \"可爱卡通风格,圆润造型,大眼睛表情包元素,粉色黄色为主,手绘贴纸感\"\n },\n \"fresh\": {\n \"name\": \"清新自然\",\n \"prompt\": \"清新自然风格,薄荷绿和天蓝为主,植物叶子装饰,干净白色背景\"\n },\n \"warm\": {\n \"name\": \"温暖治愈\",\n \"prompt\": \"温暖治愈风格,暖黄暖橙色调,柔和光线,毛绒质感,慵懒氛围\"\n },\n \"bold\": {\n \"name\": \"大胆撞色\",\n \"prompt\": \"大胆撞色风格,高饱和荧光色,强对比色块拼接,视觉冲击力强\"\n },\n \"minimal\": {\n \"name\": \"极简\",\n \"prompt\": \"极简风格,黑白灰为主,极少装饰,大面积留白,高级感\"\n },\n \"retro\": {\n \"name\": \"复古\",\n \"prompt\": \"复古风格,做旧纸张纹理,泛黄色调,老照片胶片感\"\n },\n \"pop\": {\n \"name\": \"波普\",\n \"prompt\": \"波普艺术风格,漫画网点效果,鲜艳原色,粗黑轮廓线\"\n },\n \"notion\": {\n \"name\": \"Notion风\",\n \"prompt\": \"Notion简约风格,白色背景,极简线条图标,黑色文字,少量色彩标注\"\n },\n \"chalkboard\": {\n \"name\": \"粉笔黑板\",\n \"prompt\": \"粉笔黑板风格,深绿色黑板背景,彩色粉笔手绘,温馨文艺\"\n },\n}\n\n# === 布局(信息密度)===\n\nXHS_LAYOUTS = {\n \"sparse\": {\n \"name\": \"稀疏\",\n \"points\": \"1-2点\",\n \"prompt\": \"稀疏布局,画面中央1到2个大字核心观点,大面积留白\",\n \"best_for\": \"封面、金句\"\n },\n \"balanced\": {\n \"name\": \"均衡\",\n \"points\": \"3-4点\",\n \"prompt\": \"均衡布局,3到4个要点,图文搭配,阅读舒适\",\n \"best_for\": \"常规内容\"\n },\n \"dense\": {\n \"name\": \"密集\",\n \"points\": \"5-8点\",\n \"prompt\": \"密集布局,5到8个要点紧凑排列,知识卡片感,信息量大\",\n \"best_for\": \"干货总结\"\n },\n \"list\": {\n \"name\": \"列表\",\n \"points\": \"4-7项\",\n \"prompt\": \"列表布局,4到7个条目纵向排列,编号或图标标注,清单感\",\n \"best_for\": \"清单、排行\"\n },\n \"comparison\": {\n \"name\": \"对比\",\n \"points\": \"双栏\",\n \"prompt\": \"双栏对比布局,左右分区,中间VS分隔,对比鲜明\",\n \"best_for\": \"对比、优劣\"\n },\n \"flow\": {\n \"name\": \"流程\",\n \"points\": \"3-6步\",\n \"prompt\": \"流程布局,3到6个步骤,箭头连接,从上到下或从左到右\",\n \"best_for\": \"教程、流程\"\n },\n}\n\n\ndef split_content_to_cards(content, layout, max_cards=10):\n \"\"\"将内容拆分为多张卡片\"\"\"\n cards = []\n\n # 按段落拆\n paragraphs = [p.strip() for p in re.split(r'\\n{2,}', content.strip()) if p.strip()]\n\n # 提取h2/h3标题段\n sections = []\n current = {\"title\": \"\", \"body\": \"\"}\n for para in paragraphs:\n h_match = re.match(r'^#{1,3}\\s+(.+)

zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…

, para)\n if h_match:\n if current[\"title\"] or current[\"body\"]:\n sections.append(current)\n current = {\"title\": h_match.group(1), \"body\": \"\"}\n else:\n current[\"body\"] += para + \"\\n\"\n if current[\"title\"] or current[\"body\"]:\n sections.append(current)\n\n if not sections:\n # 没有标题结构,按段落直接分\n sections = [{\"title\": f\"第{i+1}张\", \"body\": p} for i, p in enumerate(paragraphs)]\n\n # 第1张:封面\n if sections:\n first = sections[0]\n cards.append({\n \"type\": \"cover\",\n \"title\": first[\"title\"] or \"封面\",\n \"body\": first[\"body\"][:100]\n })\n\n # 中间内容卡片\n for sec in sections[1:]:\n if len(cards) >= max_cards - 1:\n break\n cards.append({\n \"type\": \"content\",\n \"title\": sec[\"title\"],\n \"body\": sec[\"body\"][:200]\n })\n\n return cards\n\n\ndef build_xhs_prompt(card, card_num, total, style_def, layout_def):\n \"\"\"构建单张小红书图的提示词\"\"\"\n card_type_hint = {\n \"cover\": \"小红书封面卡片。标题特大号字居中偏上,视觉冲击力强,吸引点击。下方可配1-2行副标题或关键词标签。背景有风格化装饰但不喧宾夺主\",\n \"content\": \"小红书内容卡片。顶部放小标题,下方将知识点用图标+文字或编号列表清晰展示。信息密度适中,每条要点配小图标辅助理解。底部留出翻页提示空间\",\n }\n\n parts = [\n f\"小红书信息图卡片,第{card_num}张(共{total}张),竖版3:4比例\",\n card_type_hint.get(card[\"type\"], card_type_hint[\"content\"]),\n style_def['prompt'],\n layout_def['prompt'],\n f\"标题内容:「{card['title']}」\",\n ]\n\n if card[\"body\"]:\n parts.append(f\"卡片展示的信息:{card['body'][:150]}\")\n\n parts.append(\"中文排版,文字清晰可读笔画完整。卡片四周留出安全边距,不贴边。整体视觉统一,适合小红书竖屏浏览\")\n return \",\".join(parts)\n\n\ndef generate_xhs(source_path, style, layout, output_dir, max_cards):\n \"\"\"主生成流程\"\"\"\n if style not in XHS_STYLES:\n print(f\"错误: 未知风格 '{style}',可用: {', '.join(XHS_STYLES.keys())}\")\n sys.exit(1)\n if layout not in XHS_LAYOUTS:\n print(f\"错误: 未知布局 '{layout}',可用: {', '.join(XHS_LAYOUTS.keys())}\")\n sys.exit(1)\n\n style_def = XHS_STYLES[style]\n layout_def = XHS_LAYOUTS[layout]\n\n # 读取内容\n with open(source_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n # 拆分卡片\n cards = split_content_to_cards(content, layout, max_cards)\n\n print(f\"📱 小红书图生成\")\n print(f\" 风格: {style_def['name']} ({style})\")\n print(f\" 布局: {layout_def['name']} ({layout}),{layout_def['points']}\")\n print(f\" 张数: {len(cards)}\")\n print(f\" 输出: {output_dir}/\")\n print()\n\n # 大纲\n print(\"=== 卡片规划 ===\")\n for i, card in enumerate(cards, 1):\n print(f\" 第{i}张 [{card['type']}] {card['title']}\")\n print()\n\n Path(output_dir).mkdir(parents=True, exist_ok=True)\n\n # 串行生成(参考上一张保持风格一致)\n prev_path = None\n for i, card in enumerate(cards, 1):\n prompt = build_xhs_prompt(card, i, len(cards), style_def, layout_def)\n output_path = os.path.join(output_dir, f\"xhs_{i:02d}.png\")\n\n print(f\" 生成第{i}/{len(cards)}张: {card['title']}\")\n\n if i == 1 or prev_path is None:\n cmd = [sys.executable, str(CORE_T2I), prompt, \"-r\", \"3:4\", \"-o\", output_path]\n else:\n ref_prompt = f\"参考模板图的配色、风格和排版,保持系列一致性。{prompt}\"\n cmd = [sys.executable, str(CORE_I2I), prev_path, ref_prompt, \"-r\", \"3:4\", \"-o\", output_path]\n\n result = subprocess.run(cmd, capture_output=True, text=True)\n if result.returncode != 0:\n print(f\" ⚠️ 失败: {result.stderr[:200]}\")\n else:\n print(f\" ✅ {output_path}\")\n prev_path = output_path\n\n print(f\"\\n全部完成!{len(cards)}张小红书图已保存到 {output_dir}/\")\n\n\ndef list_options():\n print(\"=== 风格 (9种) ===\\n\")\n for k, v in XHS_STYLES.items():\n print(f\" {k:15s} {v['name']}\")\n print(\"\\n=== 布局 (6种) ===\\n\")\n for k, v in XHS_LAYOUTS.items():\n print(f\" {k:15s} {v['name']:6s} {v['points']:8s} — {v['best_for']}\")\n print(f\"\\n共 {len(XHS_STYLES)} × {len(XHS_LAYOUTS)} = {len(XHS_STYLES)*len(XHS_LAYOUTS)} 种组合\")\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description=\"zlab 小红书信息图生成器 — 9风格 × 6布局\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n # 可爱风 + 均衡布局\n python zlab_xhs_images.py article.md --style cute --layout balanced -o xhs/\n\n # Notion风 + 密集布局\n python zlab_xhs_images.py article.md --style notion --layout dense -o xhs/\n\n # 查看选项\n python zlab_xhs_images.py --list\n \"\"\"\n )\n parser.add_argument(\"source\", nargs=\"?\", help=\"内容文件路径\")\n parser.add_argument(\"--style\", default=\"cute\", choices=XHS_STYLES.keys(), help=\"风格(默认 cute)\")\n parser.add_argument(\"--layout\", default=\"balanced\", choices=XHS_LAYOUTS.keys(), help=\"布局(默认 balanced)\")\n parser.add_argument(\"-o\", \"--output\", default=\"xhs\", help=\"输出目录(默认 xhs/)\")\n parser.add_argument(\"--cards\", type=int, default=10, help=\"最大卡片数(默认 10)\")\n parser.add_argument(\"--list\", action=\"store_true\", help=\"列出所有选项\")\n\n args = parser.parse_args()\n\n if args.list:\n list_options()\n return\n\n if not args.source:\n parser.print_help()\n print(\"\\n错误: 请提供内容文件路径\")\n sys.exit(1)\n\n if not os.path.exists(args.source):\n print(f\"错误: 文件不存在 {args.source}\")\n sys.exit(1)\n\n generate_xhs(args.source, args.style, args.layout, args.output, args.cards)\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":9764,"content_sha256":"d6f12c857275b9598bc62d8c9291a787b32e254676cdb2bb9771be7a31a0a757"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"zlab 图像处理技能","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"配置","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"配置项","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"值","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"配置文件中设置","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"生图模型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"配置文件中设置","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"视觉模型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"配置文件中设置","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"配置文件","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"config/settings.json","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"执行规范","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"脚本使用","type":"text"},{"text":"绝对路径","type":"text","marks":[{"type":"strong"}]},{"text":"调用,图片保存到","type":"text"},{"text":"当前工作目录","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提示词","type":"text"},{"text":"必须使用中文","type":"text","marks":[{"type":"strong"}]},{"text":",图中标题标签","type":"text"},{"text":"必须中文","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"含中文文字时,追加 ","type":"text"},{"text":"guides/text-rendering.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的文字清晰后缀","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"默认宽高比 ","type":"text"},{"text":"16:9","type":"text","marks":[{"type":"strong"}]},{"text":",竖版场景(小红书/漫画)默认 ","type":"text"},{"text":"3:4","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🔀 场景路由(铁律:收到需求后第一步)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"收到生图需求\n │\n ├─ 信息图/数据可视化/架构图/流程图/对比图/鱼骨图/思维导图/金字塔/漏斗/韦恩图/冰山图\n │ → 📊 信息图 → scenes/infographic/\n │\n ├─ 封面/头图/banner/公众号封面/文章封面\n │ → 🖼️ 封面图 → scenes/cover/\n │\n ├─ 长图/微信长图/多屏/从上到下/竖版长图/分段/多个段落\n │ → 📜 长图 → scenes/long-image/\n │\n ├─ 幻灯片/PPT图/slides/演示文稿\n │ → 📑 幻灯片 → scenes/slide-deck/\n │\n ├─ 漫画/连环画/分镜/绘本/知识漫画/故事图\n │ → 📖 漫画 → scenes/comic/\n │\n ├─ 文章插图/自动配图/智能插图/给文章配图\n │ → ✏️ 文章插图 → scenes/article-illust/\n │\n ├─ 小红书/笔记配图/种草图/卡片系列\n │ → 📱 小红书图 → scenes/xhs/\n │\n ├─ 海报/主图/电商/促销/九宫格/产品图/营销/物料\n │ → 🛍️ 营销物料 → scenes/marketing/\n │\n ├─ 改图/编辑图片/风格转换/基于这张图\n │ → 🔄 图生图 → core/image_to_image.py(直接执行)\n │\n ├─ 分析图片/OCR/识别文字/描述图片/图生文\n │ → 👁️ 图生文 → core/image_to_text.py(直接执行)\n │\n └─ 其他单图需求(一张图,无特殊场景)\n → 🎨 单图 → core/text_to_image.py(直接执行)","type":"text"}]},{"type":"paragraph","content":[{"text":"路由到场景后 → 加载该场景的 ","type":"text"},{"text":"README.md","type":"text","marks":[{"type":"strong"}]},{"text":" 获取详细参数和用法 → 按下方执行流程操作。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"📋 通用执行流程(所有场景共用)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第一步:分析需求","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"明确要生什么(主题、内容要点)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确定场景类型(已由路由判断)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确定数量(几张图)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确定比例(16:9 / 3:4 / 1:1 等)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第二步:规划方案(多图场景必须)","type":"text"}]},{"type":"paragraph","content":[{"text":"单图","type":"text","marks":[{"type":"strong"}]},{"text":":可跳过直接生成。 ","type":"text"},{"text":"多图场景(长图/幻灯片/漫画/小红书/文章插图)","type":"text","marks":[{"type":"strong"}]},{"text":":必须先输出规划,等用户确认后再执行。","type":"text"}]},{"type":"paragraph","content":[{"text":"规划输出格式:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"| 序号 | 内容概要 | 类型/布局 |\n|-----|---------|----------|\n| 1 | xxx | xxx |\n| 2 | xxx | xxx |\n\n**场景**:xx | **风格**:xx | **比例**:xx | **预计**:N张","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第三步:执行生成","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"执行方式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"规则","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"📊 信息图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本直接调用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单张可并发","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"🖼️ 封面图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本直接调用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单张","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"📜 长图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"core引擎串行","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"铁律:必须串行!","type":"text","marks":[{"type":"strong"}]},{"text":" 首屏text_to_image,后续image_to_image参考上一屏,最后merge拼接","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"📑 幻灯片","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本逐页","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"串行逐页生成","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"📖 漫画","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本逐页","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"串行!","type":"text","marks":[{"type":"strong"}]},{"text":" 首页text_to_image定调,后续image_to_image参考上一页","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✏️ 文章插图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本批量","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"各章节独立,可并发(≤8张)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"📱 小红书","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景脚本逐张","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"串行!","type":"text","marks":[{"type":"strong"}]},{"text":" 首张定调,后续参考上一张保风格一致","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"🛍️ 营销物料","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"core引擎+模板","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"同风格可并发(≤8张)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"🔄 图生图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"core直接调用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单张","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"🎨 单图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"core直接调用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单张","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第四步:质量校验","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成完成后,","type":"text"},{"text":"含中文文字的图","type":"text","marks":[{"type":"strong"}]},{"text":"用 ","type":"text"},{"text":"core/image_to_text.py -m ocr","type":"text","marks":[{"type":"code_inline"}]},{"text":" 校验文字是否清晰","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"OCR结果与预期不符 → 用 ","type":"text"},{"text":"core/image_to_image.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" 迭代修复(参考 ","type":"text"},{"text":"guides/text-rendering.md","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"多图场景完成后,逐张展示给用户确认,不满意的单张重新生成","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"🛠️ 脚本速查","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"场景脚本","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 📊 信息图 — 20布局×17风格=340种\npython3 scenes/infographic/zlab_infographic.py -l {布局} -s {风格} -n \"标题\" -c \"内容\" -o out.png\npython3 scenes/infographic/zlab_infographic.py --list # 查看所有选项\n\n# 🖼️ 封面图 — 五维定制=3888种\npython3 scenes/cover/zlab_cover.py -n \"标题\" --type {类型} --palette {配色} --rendering {渲染} --text {文字} --mood {氛围} -o out.png\n\n# 📑 幻灯片 — 16种预设\npython3 scenes/slide-deck/zlab_slide_deck.py article.md --style {预设} -o slides/\npython3 scenes/slide-deck/zlab_slide_deck.py article.md --outline-only # 仅看大纲\n\n# 📖 漫画 — 5画风×7基调×6布局=210种\npython3 scenes/comic/zlab_comic.py source.md --art {画风} --tone {基调} --layout {布局} -o comic/\n\n# ✏️ 文章插图 — 6类型×8风格=48种\npython3 scenes/article-illust/zlab_article_illustrator.py article.md --style {风格} -o images/\n\n# 📱 小红书 — 9风格×6布局=54种\npython3 scenes/xhs/zlab_xhs_images.py content.md --style {风格} --layout {布局} -o xhs/","type":"text"}]},{"type":"paragraph","content":[{"text":"所有场景脚本支持 ","type":"text"},{"text":"--list","type":"text","marks":[{"type":"code_inline"}]},{"text":" 查看可用选项。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"核心引擎","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 文生图\npython3 core/text_to_image.py \"中文描述\" -r 16:9 -o output.png\npython3 core/text_to_image.py \"描述\" -r 3:4 --ref ref.png -o output.png # 参考图风格\n\n# 图生图\npython3 core/image_to_image.py input.png \"编辑描述\" -r 3:4 -o output.png\n\n# 图生文\npython3 core/image_to_text.py image.jpg -m describe|ocr|chart|fashion|product|scene\n\n# 长图拼接\npython3 core/merge_long_image.py img1.png img2.png -o output.png --blend 20\npython3 core/merge_long_image.py -p \"*.png\" -o output.png --sort name","type":"text"}]},{"type":"paragraph","content":[{"text":"支持比例:","type":"text"},{"text":"1:1","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"2:3","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"3:2","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"3:4","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"4:3","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"4:5","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"5:4","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"9:16","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"16:9","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"21:9","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"📚 通用指南(按需加载)","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"触发条件","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"文件","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"何时加载","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"图片含中文文字","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"guides/text-rendering.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"提示词要求含中文标题/标签时","type":"text"},{"text":"必须加载","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"为PPT/文档配图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"guides/color-sync.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"需要与其他载体配色协同时加载","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"需要优化生图效果","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"guides/prompt-guide.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"生图效果不理想需要改进时加载","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API接口问题","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"guides/api-reference.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"调试底层接口时加载","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"生成多屏长图","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"scenes/long-image/README.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"路由到长图场景时","type":"text"},{"text":"必须加载","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"营销物料模板","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"scenes/marketing/templates.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"路由到营销场景时","type":"text"},{"text":"必须加载","type":"text","marks":[{"type":"strong"}]}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"image-service","author":"@skillopedia","source":{"stars":215,"repo_name":"opencode-skills","origin_url":"https://github.com/zrt-ai-lab/opencode-skills/blob/HEAD/image-service/SKILL.md","repo_owner":"zrt-ai-lab","body_sha256":"ee2710a14ec163da4cff7ae53ef4e759404cbcd7f9068da9a4d56af817d09290","cluster_key":"9280df7c01dcd59605cf31dcdce014386dd9002973c3d6475a300e9bc9a6ec1b","clean_bundle":{"format":"clean-skill-bundle-v1","source":"zrt-ai-lab/opencode-skills/image-service/SKILL.md","attachments":[{"id":"70faf9b6-0128-50ae-aa54-f7c4193f255b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/70faf9b6-0128-50ae-aa54-f7c4193f255b/attachment.md","path":"README.md","size":3274,"sha256":"850543afacc7abe36bcd89c015ed5df9e9503e81770b8226141e8f13d36f0959","contentType":"text/markdown; charset=utf-8"},{"id":"7dd69c34-5e29-585e-97c4-654ffbfd3b11","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7dd69c34-5e29-585e-97c4-654ffbfd3b11/attachment.json","path":"config/settings.json","size":922,"sha256":"9b1d2e7dfd2f6a330bd984a0937410b0857d3c1d08cb54fea234b39f4845ab91","contentType":"application/json; charset=utf-8"},{"id":"e28dd8ab-3acd-5c56-895a-64d599e136b1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e28dd8ab-3acd-5c56-895a-64d599e136b1/attachment.py","path":"core/image_to_image.py","size":9107,"sha256":"3b81f572e0754bc2cf12b5dd5997a56d5da48715f81f535ea66e050baf2e61fe","contentType":"text/x-python; charset=utf-8"},{"id":"ad8d4a88-fc84-5ecc-9174-175bd2376456","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ad8d4a88-fc84-5ecc-9174-175bd2376456/attachment.py","path":"core/image_to_text.py","size":10516,"sha256":"fdfb987afdd0896d9b653e7d2861606042a6eaccc7450468bca8375d1cea2297","contentType":"text/x-python; charset=utf-8"},{"id":"2312fec5-23ed-53f3-a428-d10f553c35ee","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2312fec5-23ed-53f3-a428-d10f553c35ee/attachment.py","path":"core/merge_long_image.py","size":8758,"sha256":"9c8ff934613a54a92c41208a16f4f27323e2b0dd4f7cacf2189437b4444c5a14","contentType":"text/x-python; charset=utf-8"},{"id":"0756da69-8154-57f3-89a7-ff05d46aebb6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0756da69-8154-57f3-89a7-ff05d46aebb6/attachment.py","path":"core/text_to_image.py","size":12238,"sha256":"1295c5190bd58c5d1e9e40f6c705ea861983ef8420fc260dfab9897ea46889a9","contentType":"text/x-python; charset=utf-8"},{"id":"6e8585b6-252a-5b0e-b87c-2909b21f1a50","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6e8585b6-252a-5b0e-b87c-2909b21f1a50/attachment.md","path":"guides/api-reference.md","size":4502,"sha256":"b1c4104338bf86088c5a9af45a2cdf602c326ca068754a40ea83b2d0ef37b417","contentType":"text/markdown; charset=utf-8"},{"id":"d1613947-4310-5445-97c1-685afd7441b2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d1613947-4310-5445-97c1-685afd7441b2/attachment.md","path":"guides/color-sync.md","size":2881,"sha256":"624303233a61c2b23fce13c770a8115bba857ecf13f97217a67f08e1140f824f","contentType":"text/markdown; charset=utf-8"},{"id":"95f17813-8192-5cd1-9ba5-4dbcd46a5f1e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/95f17813-8192-5cd1-9ba5-4dbcd46a5f1e/attachment.md","path":"guides/prompt-guide.md","size":5680,"sha256":"9472905615474e36c4af1a9c0d9bed0f044a5df37ec42015dc9d9519b5e6e136","contentType":"text/markdown; charset=utf-8"},{"id":"b0316fa7-49fa-5108-8d5e-8afe8017ce4d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b0316fa7-49fa-5108-8d5e-8afe8017ce4d/attachment.md","path":"guides/text-rendering.md","size":1473,"sha256":"d5061b9370ce00560293e78284ad522b020d8ff8cfa778db4f39e4f2c658fa0c","contentType":"text/markdown; charset=utf-8"},{"id":"5ea21328-e6a2-5fe7-93b5-1d10fa71ef10","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5ea21328-e6a2-5fe7-93b5-1d10fa71ef10/attachment.json","path":"presets/color-palettes.json","size":1004,"sha256":"7364a6b80bf514965573d0819a42613e7bfdd6d058b1c186da526828e58bd315","contentType":"application/json; charset=utf-8"},{"id":"801983e0-57fa-567a-80de-5bdba750c001","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/801983e0-57fa-567a-80de-5bdba750c001/attachment.json","path":"presets/style-keywords.json","size":657,"sha256":"2b4054317a4b9a80a76881b3dc6fc677fbcac338d9181a5112cdf36c05eb460a","contentType":"application/json; charset=utf-8"},{"id":"7b2ca0a1-7c92-5984-afe9-192d9800862b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7b2ca0a1-7c92-5984-afe9-192d9800862b/attachment.md","path":"scenes/article-illust/README.md","size":2081,"sha256":"9157cd01765acb976e60ee2c749d45d9d09fd520784f0dc387127412b582bcab","contentType":"text/markdown; charset=utf-8"},{"id":"0d43c987-736d-5ce6-a2da-85bd14c337f1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0d43c987-736d-5ce6-a2da-85bd14c337f1/attachment.py","path":"scenes/article-illust/zlab_article_illustrator.py","size":8841,"sha256":"6775d74c169b6512b0e7dd5b5d9211840e06461968d7ebb549f9e1d0f8143b41","contentType":"text/x-python; charset=utf-8"},{"id":"4fd5a3da-562c-5427-8252-515d5b0e4e36","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4fd5a3da-562c-5427-8252-515d5b0e4e36/attachment.md","path":"scenes/comic/README.md","size":2146,"sha256":"41d4cf541f63548ac1700f2378f9abe197712ca427b6842f619b26d056a48722","contentType":"text/markdown; charset=utf-8"},{"id":"823841ab-2fc3-59a0-aed1-9340de53dd60","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/823841ab-2fc3-59a0-aed1-9340de53dd60/attachment.py","path":"scenes/comic/zlab_comic.py","size":9740,"sha256":"848219f2ef946f9a5e5201ede083e14b9c437ca5805df9cf97071677ff43f800","contentType":"text/x-python; charset=utf-8"},{"id":"90cb147d-90f6-5b27-a5db-f8277381e44b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/90cb147d-90f6-5b27-a5db-f8277381e44b/attachment.md","path":"scenes/cover/README.md","size":2185,"sha256":"e1010c6f928ca9cee94615832a879c93f4d69994059a283ad643537d54cd74b4","contentType":"text/markdown; charset=utf-8"},{"id":"2b1d0948-fe31-5038-bfc9-e04178d22e62","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2b1d0948-fe31-5038-bfc9-e04178d22e62/attachment.py","path":"scenes/cover/zlab_cover.py","size":7003,"sha256":"a6abbde32f02d76d7c9e7bdc9c583472955ce3ce881f346b5ce48ff85a7e7e33","contentType":"text/x-python; charset=utf-8"},{"id":"6781fe7b-a53b-5675-998c-b551ccf43d68","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6781fe7b-a53b-5675-998c-b551ccf43d68/attachment.md","path":"scenes/infographic/README.md","size":2872,"sha256":"e5d898b6b8f4e2afe2881707f7e204fdb72bd83d3d8e446b11c2cd78cba0a30a","contentType":"text/markdown; charset=utf-8"},{"id":"c9f5d6a5-6708-53e2-8560-baf71cd0c199","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c9f5d6a5-6708-53e2-8560-baf71cd0c199/attachment.json","path":"scenes/infographic/layouts.json","size":10979,"sha256":"1d127b2d2de0ae6a17cca5623fe7a33289f13e46f0b72fa881511e12d24d02b1","contentType":"application/json; charset=utf-8"},{"id":"d9c3b87a-4437-5ea2-a3ea-e302d78b32da","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d9c3b87a-4437-5ea2-a3ea-e302d78b32da/attachment.json","path":"scenes/infographic/styles.json","size":7682,"sha256":"f295d77096801a5b2c77344a9cb792841dbd1f0cb53d01ed7ce132ffb6c7ea44","contentType":"application/json; charset=utf-8"},{"id":"09e5fb5d-3b25-52d1-8a13-51d91a923d65","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09e5fb5d-3b25-52d1-8a13-51d91a923d65/attachment.py","path":"scenes/infographic/zlab_infographic.py","size":4684,"sha256":"068a407f5411900166b83c3a815f078f231d9da549041b395ae6a38692a30844","contentType":"text/x-python; charset=utf-8"},{"id":"18246207-9a2e-5e6f-82ec-8b9eeb9a016d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/18246207-9a2e-5e6f-82ec-8b9eeb9a016d/attachment.md","path":"scenes/long-image/README.md","size":5261,"sha256":"a2d6dcbe083f5859fc2feacbc34fb68e13fd212cd8a2e717ebc2a0a29cf2a4ea","contentType":"text/markdown; charset=utf-8"},{"id":"d87626e7-39e5-5d1d-b251-62296f9439f2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d87626e7-39e5-5d1d-b251-62296f9439f2/attachment.md","path":"scenes/marketing/README.md","size":900,"sha256":"33c0a3ef67d9a0325db471e69728a338ac9199899d9904d0a80db8e7452d632a","contentType":"text/markdown; charset=utf-8"},{"id":"c7a58d0c-16b0-535c-a653-bfb192701c50","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c7a58d0c-16b0-535c-a653-bfb192701c50/attachment.md","path":"scenes/marketing/templates.md","size":5515,"sha256":"cc70fd18e025cb2c42888d3530c245e07eb36ac7615c723064deefc83caad151","contentType":"text/markdown; charset=utf-8"},{"id":"305ecf85-cd83-5e9b-88eb-c34418b39d23","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/305ecf85-cd83-5e9b-88eb-c34418b39d23/attachment.md","path":"scenes/slide-deck/README.md","size":2508,"sha256":"4d038e2217566becbce9cf75b55c0f966372edcc5d778e341fa240184fd87c0e","contentType":"text/markdown; charset=utf-8"},{"id":"7181b4b4-8a1c-52f0-83a0-760f29daf245","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7181b4b4-8a1c-52f0-83a0-760f29daf245/attachment.py","path":"scenes/slide-deck/zlab_slide_deck.py","size":11573,"sha256":"bc880c9ea62bc530a4812d819422bbba278b3f7bdeb99d0b0ca0ef14cd3fcb99","contentType":"text/x-python; charset=utf-8"},{"id":"4d44b4e6-2cc3-59d1-80a1-d83e059fb59b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4d44b4e6-2cc3-59d1-80a1-d83e059fb59b/attachment.md","path":"scenes/xhs/README.md","size":1929,"sha256":"da6e68e7db55123fbf5496c752ed3325db5242da2c13bb5a76ac2a04326d5415","contentType":"text/markdown; charset=utf-8"},{"id":"007f79fc-3c11-5737-9f8f-f77df1974694","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/007f79fc-3c11-5737-9f8f-f77df1974694/attachment.py","path":"scenes/xhs/zlab_xhs_images.py","size":9764,"sha256":"d6f12c857275b9598bc62d8c9291a787b32e254676cdb2bb9771be7a31a0a757","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"686caa5448b063877cc551d1823db44c473b30e0c6126916f6022fcac95eada7","attachment_count":29,"text_attachments":29,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"image-service/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"media-content","category_label":"Media"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"media-content","import_tag":"clean-skills-v1","description":"多模态图像处理技能,支持信息图、封面图、长图、幻灯片、漫画、文章插图、小红书图、营销物料等多场景生图,以及图生图、图生文、长图拼接。"}},"renderedAt":1782980388195}

zlab 图像处理技能 配置 | 配置项 | 值 | |-------|-----| | API | | | 生图模型 | | | 视觉模型 | | | 配置文件 | | 执行规范 - 脚本使用 绝对路径 调用,图片保存到 当前工作目录 - 提示词 必须使用中文 ,图中标题标签 必须中文 - 含中文文字时,追加 中的文字清晰后缀 - 默认宽高比 16:9 ,竖版场景(小红书/漫画)默认 3:4 🔀 场景路由(铁律:收到需求后第一步) 路由到场景后 → 加载该场景的 README.md 获取详细参数和用法 → 按下方执行流程操作。 --- 📋 通用执行流程(所有场景共用) 第一步:分析需求 - 明确要生什么(主题、内容要点) - 确定场景类型(已由路由判断) - 确定数量(几张图) - 确定比例(16:9 / 3:4 / 1:1 等) 第二步:规划方案(多图场景必须) 单图 :可跳过直接生成。 多图场景(长图/幻灯片/漫画/小红书/文章插图) :必须先输出规划,等用户确认后再执行。 规划输出格式: 第三步:执行生成 | 场景 | 执行方式 | 规则 | |------|---------|------| | 📊 信息图 | 场景脚本直接调用 | 单张可并发 | | 🖼️ 封面图 | 场景脚本直接调用 | 单张 | | 📜 长图 | core引擎串行 | 铁律:必须串行!…