infographic
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseInfographic Generator
信息图表生成器
Transform any text into a print-quality infographic PNG.
将任意文本转换为可打印质量的信息图PNG。
Usage
使用方法
/infographic
/infographic nico
/infographic olive
/infographic werner
/infographic transit
/infographic parks
/infographic euclid
/infographic timber
/infographic prestonThen paste or describe your content when prompted.
Or provide text directly:
/infographic "Your article or content here..."
/infographic olive "When should I use X vs Y?"
/infographic werner "List the primary colors with examples"
/infographic transit "Rank the tallest buildings in NYC"
/infographic parks "Compare 3 national parks with stats"
/infographic euclid "Overview of geometry concepts"
/infographic timber "History of JavaScript frameworks"
/infographic preston "How to deploy a Next.js app"/infographic
/infographic nico
/infographic olive
/infographic werner
/infographic transit
/infographic parks
/infographic euclid
/infographic timber
/infographic preston然后在系统提示时粘贴或描述你的内容。
也可以直接提供文本:
/infographic "你的文章或内容在这里..."
/infographic olive "我应该什么时候用X而不是Y?"
/infographic werner "列出三原色及示例"
/infographic transit "排名纽约最高的建筑"
/infographic parks "对比3个国家公园的统计数据"
/infographic euclid "几何概念概述"
/infographic timber "JavaScript框架发展史"
/infographic preston "如何部署Next.js应用"Palettes
调色板
Palettes control colors independently from styles. Mix and match any style with any palette.
调色板独立于样式控制颜色,可任意混搭样式与调色板。
Usage
使用方式
bash
undefinedbash
undefinedStyle with default palette
使用默认调色板的样式
/infographic olive "..."
/infographic olive "..."
Style with specific palette
使用指定调色板的样式
/infographic olive:nordic "..."
/infographic olive --palette nordic "..."
undefined/infographic olive:nordic "..."
/infographic olive --palette nordic "..."
undefinedAvailable Palettes
可用调色板
| Palette | Canvas | Description |
|---|---|---|
| earth | light | Warm cream with sage accents (default) |
| nordic | dark | Cool blue-gray, frost accents |
| desert | light | Sandy tones, terracotta accents |
| ocean | light | Pale blue-gray, teal accents |
| forest | dark | Deep greens, moss accents |
| 调色板 | 画布类型 | 描述 |
|---|---|---|
| earth | 亮色 | 暖奶油色搭配鼠尾草色点缀(默认) |
| nordic | 暗色 | 冷调蓝灰色,霜色点缀 |
| desert | 亮色 | 沙色调,陶土色点缀 |
| ocean | 亮色 | 浅蓝灰色,青色点缀 |
| forest | 暗色 | 深绿色,苔藓色点缀 |
Default Palette Mapping
默认调色板映射
| Style | Default Palette |
|---|---|
| olive | earth |
| c82 | earth |
| nico | earth |
| werner | earth |
| transit | earth |
| parks | forest |
| euclid | earth |
| timber | earth |
| preston | earth |
| 样式 | 默认调色板 |
|---|---|
| olive | earth |
| c82 | earth |
| nico | earth |
| werner | earth |
| transit | earth |
| parks | forest |
| euclid | earth |
| timber | earth |
| preston | earth |
Compatibility
兼容性
Styles declare a canvas preference (, , or ). When a style's preference conflicts with a palette's canvas type:
lightdarkany- Warning is shown
- Text colors swap to /
text.onDarkfor readabilitytext.onLight
样式会声明画布偏好(亮色、暗色、任意),当样式偏好与调色板画布类型冲突时:
lightdarkany- 会显示警告提示
- 文本颜色会自动切换为/
text.onDark保证可读性text.onLight
Token Reference
令牌参考
Styles use these tokens (resolved from the active palette):
| Token | SVG Placeholder | Usage |
|---|---|---|
| | Background fill |
| | Main headings/body |
| | Supporting text |
| | Subtle labels |
| | Text on dark cards |
| | Text on light cards |
| | Accent color (rotate through array) |
| | Main card fill |
| | Secondary card fill |
| | Divider lines |
样式使用以下令牌(从当前激活的调色板解析取值):
| 令牌 | SVG占位符 | 用途 |
|---|---|---|
| | 背景填充 |
| | 主标题/正文 |
| | 辅助文本 |
| | 弱化标签 |
| | 暗色卡片上的文本 |
| | 亮色卡片上的文本 |
| | 强调色(从数组循环取值) |
| | 主卡片填充 |
| | 次卡片填充 |
| | 分割线 |
Style Resolution
样式解析
The first argument (if not quoted text) is treated as a style name. Default: .
c82Loading order:
- Load from this skill directory
styles/<name>.md - If the style declares , also load
inherits: design:<name>from the skills directorydesign/<name>/SKILL.md - Design system = foundation, infographic style = overrides
Available styles:
- c82 (default) — Classical typography, warm cream canvas, muted naturalist palette. Best for stat-blocks.
- nico — Dark forest aesthetic, luminous text, desaturated accents. Best for stat-blocks.
- olive — Soft earth tones, rounded cards, shadows. Best for decision trees and comparisons.
- werner — Classical catalog/table layout with swatches and multiple columns. Best for catalogs, reference charts.
- transit — Vertical bar chart with tick marks, ranked data. Best for comparisons by quantity.
- parks — Dark dashboard with colored tile grid, icons + values. Best for multi-stat comparisons.
- euclid — Bauhaus-colored gallery grid with geometric illustrations. Best for visual item galleries.
- timber — Vertical timeline with spine and alternating event cards. Best for chronological histories.
- preston — Process flowchart with numbered steps and connecting arrows. Best for how-to guides.
第一个非引号包裹的参数会被识别为样式名称,默认值为。
c82加载顺序:
- 从当前skill目录加载
styles/<name>.md - 如果样式声明了,还会从skills目录加载
inherits: design:<name>design/<name>/SKILL.md - 设计系统作为基础,信息图样式作为覆盖配置
可用样式:
- c82(默认)—— 古典排版,暖奶油色画布,柔和自然调色板,最适合统计块
- nico—— 深色森林美学,亮色系文本,低饱和强调色,最适合统计块
- olive—— 柔和大地色调,圆角卡片,带阴影,最适合决策树和对比内容
- werner—— 古典目录/表格布局,带色卡和多列布局,最适合目录、参考图表
- transit—— 带刻度的垂直条形图,可排序数据,最适合按数量对比的内容
- parks—— 深色仪表盘,带彩色磁贴网格、图标+数值,最适合多统计项对比
- euclid—— 包豪斯配色的画廊网格,搭配几何插图,最适合可视化项目画廊
- timber—— 带中轴线的垂直时间线,交替排列事件卡片,最适合按时间排序的历史内容
- preston—— 带编号步骤和连接箭头的流程流程图,最适合操作指南
Process
处理流程
- Resolve Style — Determine style from arguments, load style file(s)
- Detect Layout — Analyze content to determine best layout type
- Extract Structure — Extract structured data matching the detected layout
- Generate SVG — Write SVG following the loaded style guide
- Export PNG — Convert to high-res PNG (2000px wide)
- Open — Display result for review
- 样式解析—— 从参数确定样式,加载样式文件
- 布局检测—— 分析内容确定最佳布局类型
- 结构提取—— 提取匹配检测到的布局的结构化数据
- 生成SVG—— 按照加载的样式规范编写SVG
- 导出PNG—— 转换为2000px宽的高清PNG
- 打开展示—— 显示结果供用户审核
Output Location
输出位置
Files saved to:
~/Downloads/infographic-{timestamp}.png文件保存至:
~/Downloads/infographic-{timestamp}.pngLayout Detection
布局检测
Analyze the input content and select the appropriate layout:
| Content Pattern | Layout | Best Styles |
|---|---|---|
| "If X then Y", "When to use", yes/no questions, binary choices | decision-tree | olive |
| "A vs B", comparing options, pros/cons, alternatives | comparison | olive |
| Statistics, key findings, sections, summaries | stat-block | c82, nico |
| Lists with multiple attributes, color palettes, specifications | catalog | werner |
| Ranked quantities, lengths, heights, counts to compare | bars | transit |
| Items with multiple numeric stats, dashboards | tiles | parks |
| Visual items with illustrations/icons and captions | gallery | euclid |
| Chronological events, history, evolution, milestones | timeline | timber |
| Sequential steps, how-to guides, workflows, processes | process | preston |
Detection rules:
- If content asks a question with two distinct answer paths →
decision-tree - If content compares 2-4 distinct options/approaches →
comparison - If content lists items with multiple attributes per item (colors, specs) →
catalog - If content ranks items by a single quantity (height, length, count) →
bars - If content shows multiple numeric stats per item (dashboard style) →
tiles - If content presents visual items with labels/descriptions →
gallery - If content has chronological events with dates/years →
timeline - If content describes sequential steps or a process →
process - Otherwise → (default)
stat-block
Style-layout affinity:
- style defaults to auto-detecting between decision-tree/comparison
olive - style defaults to catalog layout
werner - style defaults to bars layout
transit - style defaults to tiles layout
parks - style defaults to gallery layout
euclid - style defaults to timeline layout
timber - style defaults to process layout
preston - and
c82styles default to stat-block layoutnico
分析输入内容选择合适的布局:
| 内容模式 | 布局 | 最佳适配样式 |
|---|---|---|
| "如果X则Y"、"什么时候用"、是非问题、二元选择 | decision-tree | olive |
| "A vs B"、选项对比、优缺点、替代方案 | comparison | olive |
| 统计数据、关键发现、章节内容、总结 | stat-block | c82, nico |
| 多属性列表、调色板、规格参数 | catalog | werner |
| 按数量、长度、高度、计数排序的排名内容 | bars | transit |
| 带多个数值统计的项目、仪表盘类内容 | tiles | parks |
| 带插图/图标和说明的可视化项目 | gallery | euclid |
| 按时间排序的事件、历史、演变、里程碑 | timeline | timber |
| 顺序步骤、操作指南、工作流、流程 | process | preston |
检测规则:
- 如果内容是带有两个不同答案路径的问题 →
decision-tree - 如果内容对比2-4个不同选项/方案 →
comparison - 如果内容是每个项目带有多个属性的列表(颜色、规格) →
catalog - 如果内容按单一数量(高度、长度、计数)排序项目 →
bars - 如果内容展示每个项目的多个数值统计(仪表盘风格) →
tiles - 如果内容呈现带标签/描述的可视化项目 →
gallery - 如果内容带有带日期/年份的时序事件 →
timeline - 如果内容描述顺序步骤或流程 →
process - 其他情况 → (默认)
stat-block
样式-布局适配规则:
- 样式默认自动检测决策树/对比布局
olive - 样式默认使用目录布局
werner - 样式默认使用条形图布局
transit - 样式默认使用磁贴布局
parks - 样式默认使用画廊布局
euclid - 样式默认使用时间线布局
timber - 样式默认使用流程布局
preston - 和
c82样式默认使用统计块布局nico
Layout: stat-block (default)
布局:stat-block(默认)
Classical infographic with sections, stats, and key takeaway.
带章节、统计数据和核心结论的古典信息图。
Extraction Schema
提取Schema
typescript
{
layout: "stat-block"
title: string // Main title, 3-10 words
subtitle?: string // Optional tagline
sections: [{ // 2-4 sections
heading: string // Section heading, 3-8 words
content: string // 1-2 sentences max
stats?: [{ // Up to 3 stats per section
value: string // e.g. "85%", "1.2M"
label: string // What it represents
}]
}]
keyTakeaway: string // Single most important insight
}typescript
{
layout: "stat-block"
title: string // 主标题,3-10个词
subtitle?: string // 可选标语
sections: [{ // 2-4个章节
heading: string // 章节标题,3-8个词
content: string // 最多1-2句话
stats?: [{ // 每个章节最多3个统计项
value: string // 例如 "85%", "1.2M"
label: string // 统计项代表的含义
}]
}]
keyTakeaway: string // 最重要的单条洞察
}SVG Template Structure
SVG模板结构
svg
<svg width="800" height="1100" xmlns="http://www.w3.org/2000/svg">
<!-- Canvas background -->
<rect width="800" height="1100" fill="{canvasColor}"/>
<!-- Border frame -->
<rect x="{inset}" y="{inset}" width="{w-2*inset}" height="{h-2*inset}" fill="none" stroke="{ruleColor}" stroke-width="1"/>
<!-- Header area (centered) -->
<text x="400" y="100" text-anchor="middle" fill="{textColor}" font-size="36" font-weight="bold" font-family="{headingFont}">{title}</text>
<text x="400" y="132" text-anchor="middle" fill="{mutedColor}" font-size="16" font-style="italic" font-family="{headingFont}">{subtitle}</text>
<!-- Divider under header -->
<line x1="200" y1="160" x2="600" y2="160" stroke="{ruleColor}" stroke-width="0.5"/>
<!-- Section (repeat for each) -->
<text x="{margin}" y="210" fill="{accentColor}" font-size="13" font-family="{labelFont}" letter-spacing="2">{SECTION HEADING}</text>
<text x="{margin}" y="236" fill="{textColor}" font-size="15" font-family="{bodyFont}" line-height="1.6">
<tspan x="{margin}" dy="0">{contentLine1}</tspan>
<tspan x="{margin}" dy="22">{contentLine2}</tspan>
</text>
<!-- Stats row -->
<text x="{statX}" y="300" text-anchor="middle" fill="{textColor}" font-size="48" font-family="{headingFont}">{statValue}</text>
<line x1="{ruleX1}" y1="308" x2="{ruleX2}" y2="308" stroke="{ruleColor}" stroke-width="0.5"/>
<text x="{statX}" y="324" text-anchor="middle" fill="{mutedColor}" font-size="11" font-family="{labelFont}" letter-spacing="2">{STAT LABEL}</text>
<!-- Section divider -->
<line x1="{margin}" y1="360" x2="{margin+contentWidth}" y2="360" stroke="{ruleColor}" stroke-width="0.5"/>
<!-- Key Takeaway (bottom) -->
<line x1="200" y1="980" x2="600" y2="980" stroke="{ruleColor}" stroke-width="0.5"/>
<line x1="200" y1="983" x2="600" y2="983" stroke="{ruleColor}" stroke-width="0.5"/>
<text x="400" y="1020" text-anchor="middle" fill="{mutedColor}" font-size="14" font-style="italic" font-family="{headingFont}">{keyTakeaway}</text>
</svg>svg
<svg width="800" height="1100" xmlns="http://www.w3.org/2000/svg">
<!-- 画布背景 -->
<rect width="800" height="1100" fill="{canvasColor}"/>
<!-- 边框 -->
<rect x="{inset}" y="{inset}" width="{w-2*inset}" height="{h-2*inset}" fill="none" stroke="{ruleColor}" stroke-width="1"/>
<!-- 头部区域(居中) -->
<text x="400" y="100" text-anchor="middle" fill="{textColor}" font-size="36" font-weight="bold" font-family="{headingFont}">{title}</text>
<text x="400" y="132" text-anchor="middle" fill="{mutedColor}" font-size="16" font-style="italic" font-family="{headingFont}">{subtitle}</text>
<!-- 头部分割线 -->
<line x1="200" y1="160" x2="600" y2="160" stroke="{ruleColor}" stroke-width="0.5"/>
<!-- 章节(重复生成) -->
<text x="{margin}" y="210" fill="{accentColor}" font-size="13" font-family="{labelFont}" letter-spacing="2">{SECTION HEADING}</text>
<text x="{margin}" y="236" fill="{textColor}" font-size="15" font-family="{bodyFont}" line-height="1.6">
<tspan x="{margin}" dy="0">{contentLine1}</tspan>
<tspan x="{margin}" dy="22">{contentLine2}</tspan>
</text>
<!-- 统计行 -->
<text x="{statX}" y="300" text-anchor="middle" fill="{textColor}" font-size="48" font-family="{headingFont}">{statValue}</text>
<line x1="{ruleX1}" y1="308" x2="{ruleX2}" y2="308" stroke="{ruleColor}" stroke-width="0.5"/>
<text x="{statX}" y="324" text-anchor="middle" fill="{mutedColor}" font-size="11" font-family="{labelFont}" letter-spacing="2">{STAT LABEL}</text>
<!-- 章节分割线 -->
<line x1="{margin}" y1="360" x2="{margin+contentWidth}" y2="360" stroke="{ruleColor}" stroke-width="0.5"/>
<!-- 核心结论(底部) -->
<line x1="200" y1="980" x2="600" y2="980" stroke="{ruleColor}" stroke-width="0.5"/>
<line x1="200" y1="983" x2="600" y2="983" stroke="{ruleColor}" stroke-width="0.5"/>
<text x="400" y="1020" text-anchor="middle" fill="{mutedColor}" font-size="14" font-style="italic" font-family="{headingFont}">{keyTakeaway}</text>
</svg>Layout: decision-tree
布局:decision-tree
Binary choice flowchart with question bubble and two branch cards.
带问题气泡和两个分支卡片的二元选择流程图。
Extraction Schema
提取Schema
typescript
{
layout: "decision-tree"
question: string // The decision point (displayed in bubble)
branches: [{
label: string // "YES" / "NO" or custom labels
title: string // Branch heading (e.g., "Use Perplexity")
description: string // Supporting explanation (1-2 sentences)
bullets?: string[] // Optional 2-4 bullet points
icon?: string // Icon hint: search, document, data, draft, etc.
}, {
// Second branch (same structure)
}]
}typescript
{
layout: "decision-tree"
question: string // 决策点(显示在气泡中)
branches: [{
label: string // "是" / "否" 或自定义标签
title: string // 分支标题(例如 "使用Perplexity")
description: string // 辅助说明(1-2句话)
bullets?: string[] // 可选2-4个要点
icon?: string // 图标提示:search, document, data, draft等
}, {
// 第二个分支(结构相同)
}]
}SVG Template (olive style)
SVG模板(olive样式)
svg
<svg width="800" height="620" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.1"/>
</filter>
</defs>
<!-- Canvas -->
<rect width="800" height="620" fill="#F5F0E6"/>
<!-- Question bubble (top center) -->
<rect x="140" y="30" width="520" height="70" rx="35" fill="#FAFAF8" filter="url(#shadow)" stroke="#2C2C2C" stroke-width="1"/>
<text x="400" y="72" text-anchor="middle" fill="#2C2C2C" font-size="18" font-weight="500" font-family="system-ui">{question}</text>
<!-- Curved arrows from bubble to cards -->
<path d="M280,100 Q280,140 200,180" fill="none" stroke="#2C2C2C" stroke-width="1.5"/>
<path d="M520,100 Q520,140 600,180" fill="none" stroke="#2C2C2C" stroke-width="1.5"/>
<!-- Arrow heads -->
<polygon points="195,175 205,185 210,172" fill="#2C2C2C"/>
<polygon points="605,175 595,185 590,172" fill="#2C2C2C"/>
<!-- Branch labels -->
<text x="220" y="145" text-anchor="middle" fill="#7D8B6E" font-size="14" font-weight="bold" font-family="system-ui">{branch1.label}</text>
<text x="580" y="145" text-anchor="middle" fill="#7D8B6E" font-size="14" font-weight="bold" font-family="system-ui">{branch2.label}</text>
<!-- Left card (primary color) -->
<rect x="30" y="190" width="360" height="400" rx="16" fill="#7D8B6E" filter="url(#shadow)"/>
<!-- Left icon circle -->
<circle cx="80" cy="240" r="24" fill="#FAFAF8"/>
<!-- Icon path goes here -->
<!-- Left card content -->
<text x="120" y="248" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="system-ui">{branch1.title}</text>
<text x="50" y="290" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">{description line 1}</tspan>
<tspan x="50" dy="22">{description line 2}</tspan>
</text>
<!-- Bullets -->
<text x="50" y="360" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">• {bullet1}</tspan>
<tspan x="50" dy="24">• {bullet2}</tspan>
<tspan x="50" dy="24">• {bullet3}</tspan>
</text>
<!-- Right card (secondary color) -->
<rect x="410" y="190" width="360" height="400" rx="16" fill="#E8E2D4" filter="url(#shadow)"/>
<!-- Right icon circle -->
<circle cx="460" cy="240" r="24" fill="#FAFAF8"/>
<!-- Icon path goes here -->
<!-- Right card content (dark text) -->
<text x="500" y="248" fill="#2C2C2C" font-size="20" font-weight="bold" font-family="system-ui">{branch2.title}</text>
<!-- ... same structure as left card but with #2C2C2C text -->
</svg>svg
<svg width="800" height="620" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.1"/>
</filter>
</defs>
<!-- 画布 -->
<rect width="800" height="620" fill="#F5F0E6"/>
<!-- 问题气泡(顶部居中) -->
<rect x="140" y="30" width="520" height="70" rx="35" fill="#FAFAF8" filter="url(#shadow)" stroke="#2C2C2C" stroke-width="1"/>
<text x="400" y="72" text-anchor="middle" fill="#2C2C2C" font-size="18" font-weight="500" font-family="system-ui">{question}</text>
<!-- 气泡到卡片的曲线箭头 -->
<path d="M280,100 Q280,140 200,180" fill="none" stroke="#2C2C2C" stroke-width="1.5"/>
<path d="M520,100 Q520,140 600,180" fill="none" stroke="#2C2C2C" stroke-width="1.5"/>
<!-- 箭头头部 -->
<polygon points="195,175 205,185 210,172" fill="#2C2C2C"/>
<polygon points="605,175 595,185 590,172" fill="#2C2C2C"/>
<!-- 分支标签 -->
<text x="220" y="145" text-anchor="middle" fill="#7D8B6E" font-size="14" font-weight="bold" font-family="system-ui">{branch1.label}</text>
<text x="580" y="145" text-anchor="middle" fill="#7D8B6E" font-size="14" font-weight="bold" font-family="system-ui">{branch2.label}</text>
<!-- 左侧卡片(主色) -->
<rect x="30" y="190" width="360" height="400" rx="16" fill="#7D8B6E" filter="url(#shadow)"/>
<!-- 左侧图标圆 -->
<circle cx="80" cy="240" r="24" fill="#FAFAF8"/>
<!-- 图标路径放在这里 -->
<!-- 左侧卡片内容 -->
<text x="120" y="248" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="system-ui">{branch1.title}</text>
<text x="50" y="290" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">{description line 1}</tspan>
<tspan x="50" dy="22">{description line 2}</tspan>
</text>
<!-- 要点 -->
<text x="50" y="360" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">• {bullet1}</tspan>
<tspan x="50" dy="24">• {bullet2}</tspan>
<tspan x="50" dy="24">• {bullet3}</tspan>
</text>
<!-- 右侧卡片(次色) -->
<rect x="410" y="190" width="360" height="400" rx="16" fill="#E8E2D4" filter="url(#shadow)"/>
<!-- 右侧图标圆 -->
<circle cx="460" cy="240" r="24" fill="#FAFAF8"/>
<!-- 图标路径放在这里 -->
<!-- 右侧卡片内容(深色文本) -->
<text x="500" y="248" fill="#2C2C2C" font-size="20" font-weight="bold" font-family="system-ui">{branch2.title}</text>
<!-- ... 结构和左侧卡片相同,文本颜色为#2C2C2C -->
</svg>Layout: comparison
布局:comparison
Side-by-side comparison cards for 2-4 options.
2-4个选项的并排对比卡片。
Extraction Schema
提取Schema
typescript
{
layout: "comparison"
title?: string // Optional main title above cards
items: [{
heading: string // Option name (e.g., "React", "Vue")
description: string // Brief description (1-2 sentences)
bullets?: string[] // Optional 2-4 key points
color: "primary" | "secondary" // Card color alternation
icon?: string // Icon hint
}]
}typescript
{
layout: "comparison"
title?: string // 卡片上方的可选主标题
items: [{
heading: string // 选项名称(例如 "React", "Vue")
description: string // 简短说明(1-2句话)
bullets?: string[] // 可选2-4个核心要点
color: "primary" | "secondary" // 卡片颜色交替
icon?: string // 图标提示
}]
}SVG Template (olive style, 2 items)
SVG模板(olive样式,2个项目)
svg
<svg width="800" height="520" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.1"/>
</filter>
</defs>
<!-- Canvas -->
<rect width="800" height="520" fill="#F5F0E6"/>
<!-- Optional title -->
<text x="400" y="50" text-anchor="middle" fill="#2C2C2C" font-size="24" font-weight="500" font-family="system-ui">{title}</text>
<!-- Card 1 (primary) -->
<rect x="30" y="80" width="360" height="410" rx="16" fill="#7D8B6E" filter="url(#shadow)"/>
<circle cx="80" cy="130" r="24" fill="#FAFAF8"/>
<!-- Icon -->
<text x="120" y="138" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="system-ui">{item1.heading}</text>
<text x="50" y="180" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">{description}</tspan>
</text>
<text x="50" y="240" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">• {bullet1}</tspan>
<tspan x="50" dy="24">• {bullet2}</tspan>
</text>
<!-- Card 2 (secondary) -->
<rect x="410" y="80" width="360" height="410" rx="16" fill="#E8E2D4" filter="url(#shadow)"/>
<circle cx="460" cy="130" r="24" fill="#FAFAF8"/>
<!-- Icon -->
<text x="500" y="138" fill="#2C2C2C" font-size="20" font-weight="bold" font-family="system-ui">{item2.heading}</text>
<!-- ... -->
</svg>svg
<svg width="800" height="520" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.1"/>
</filter>
</defs>
<!-- 画布 -->
<rect width="800" height="520" fill="#F5F0E6"/>
<!-- 可选标题 -->
<text x="400" y="50" text-anchor="middle" fill="#2C2C2C" font-size="24" font-weight="50" font-family="system-ui">{title}</text>
<!-- 卡片1(主色) -->
<rect x="30" y="80" width="360" height="410" rx="16" fill="#7D8B6E" filter="url(#shadow)"/>
<circle cx="80" cy="130" r="24" fill="#FAFAF8"/>
<!-- 图标 -->
<text x="120" y="138" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="system-ui">{item1.heading}</text>
<text x="50" y="180" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">{description}</tspan>
</text>
<text x="50" y="240" fill="#FAFAF8" font-size="14" font-family="system-ui">
<tspan x="50" dy="0">• {bullet1}</tspan>
<tspan x="50" dy="24">• {bullet2}</tspan>
</text>
<!-- 卡片2(次色) -->
<rect x="410" y="80" width="360" height="410" rx="16" fill="#E8E2D4" filter="url(#shadow)"/>
<circle cx="460" cy="130" r="24" fill="#FAFAF8"/>
<!-- 图标 -->
<text x="500" y="138" fill="#2C2C2C" font-size="20" font-weight="bold" font-family="system-ui">{item2.heading}</text>
<!-- ... -->
</svg>Sizing for multiple items
多项目尺寸适配
- 2 items: 800x520, cards 360px wide
- 3 items: 1000x520, cards 300px wide
- 4 items: 1200x520, cards 270px wide
- 2个项目:800x520,卡片宽360px
- 3个项目:1000x520,卡片宽300px
- 4个项目:1200x520,卡片宽270px
Layout: catalog
布局:catalog
Table/catalog layout with swatches, multiple columns, and classical typography. Inspired by Werner's Nomenclature of Colours.
带色卡、多列和古典排版的表格/目录布局,灵感来源于Werner的色彩命名法。
Extraction Schema
提取Schema
typescript
{
layout: "catalog"
title?: string // Optional title above table (uppercase, letter-spaced)
columns: string[] // Column headers
rows: [{
swatch?: string // Hex color for swatch column (optional)
values: string[] // Data for each column
parts?: string[] // Hex colors for palette dots (optional)
}]
}typescript
{
layout: "catalog"
title?: string // 表格上方可选标题(大写,字符间距大)
columns: string[] // 列头
rows: [{
swatch?: string // 色卡列的十六进制颜色(可选)
values: string[] // 每列的数据
parts?: string[] // 调色板圆点的十六进制颜色(可选)
}]
}SVG Template (werner style)
SVG模板(werner样式)
svg
<svg width="900" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- Canvas -->
<rect width="900" height="{height}" fill="#F5F0E6"/>
<!-- Title (optional) -->
<text x="450" y="45" text-anchor="middle" fill="#2C2C2C" font-size="18" font-family="Georgia, serif" letter-spacing="4">{TITLE}</text>
<!-- Header row with underlines -->
<text x="60" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Color</text>
<text x="130" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Name</text>
<text x="280" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Animal</text>
<text x="450" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Vegetable</text>
<text x="620" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Mineral</text>
<text x="790" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Parts</text>
<!-- Data row -->
<rect x="60" y="110" width="50" height="60" fill="{swatchColor}" stroke="#C4B8A8" stroke-width="0.5"/>
<text x="130" y="145" fill="#2C2C2C" font-size="14" font-family="Georgia, serif">24. Scotch Blue</text>
<text x="280" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Throat of Blue Titmouse.</text>
<text x="450" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Stamina of Single Purple Anemone.</text>
<text x="620" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Blue Copper Ore.</text>
<!-- Parts palette dots -->
<circle cx="795" cy="140" r="12" fill="#1a1a1a"/>
<circle cx="823" cy="140" r="12" fill="#4a7089"/>
<circle cx="851" cy="140" r="12" fill="#c4a5a0"/>
<!-- Repeat rows with 80-90px vertical spacing -->
</svg>svg
<svg width="900" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- 画布 -->
<rect width="900" height="{height}" fill="#F5F0E6"/>
<!-- 标题(可选) -->
<text x="450" y="45" text-anchor="middle" fill="#2C2C2C" font-size="18" font-family="Georgia, serif" letter-spacing="4">{TITLE}</text>
<!-- 带下划线的头行 -->
<text x="60" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Color</text>
<text x="130" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Name</text>
<text x="280" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Animal</text>
<text x="450" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Vegetable</text>
<text x="620" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Mineral</text>
<text x="790" y="90" fill="#2C2C2C" font-size="12" font-family="Georgia, serif" text-decoration="underline">Parts</text>
<!-- 数据行 -->
<rect x="60" y="110" width="50" height="60" fill="{swatchColor}" stroke="#C4B8A8" stroke-width="0.5"/>
<text x="130" y="145" fill="#2C2C2C" font-size="14" font-family="Georgia, serif">24. Scotch Blue</text>
<text x="280" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Throat of Blue Titmouse.</text>
<text x="450" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Stamina of Single Purple Anemone.</text>
<text x="620" y="145" fill="#2C2C2C" font-size="13" font-style="italic" font-family="Georgia, serif">Blue Copper Ore.</text>
<!-- 调色板圆点 -->
<circle cx="795" cy="140" r="12" fill="#1a1a1a"/>
<circle cx="823" cy="140" r="12" fill="#4a7089"/>
<circle cx="851" cy="140" r="12" fill="#c4a5a0"/>
<!-- 重复行,垂直间距80-90px -->
</svg>Layout Notes
布局说明
- Row height: 80-90px (accommodates swatches and wrapped text)
- Swatch size: 50x60px or 60x70px
- Parts dots: 20-24px diameter, 4px gap or slight overlap
- Italics for descriptive/natural reference columns
- Number prefix for names when showing ordered items (e.g., "24. Scotch Blue")
- Add subtle row dividers (0.5px) or use whitespace (24px gap)
- Height is dynamic: pixels
110 + (rowCount × 90)
- 行高:80-90px(适配色卡和折行文本)
- 色卡尺寸:50x60px 或 60x70px
- 调色板圆点:直径20-24px,4px间距或轻微重叠
- 描述性/自然参考列使用斜体
- 展示有序项目时名称加编号前缀(例如 "24. Scotch Blue")
- 可添加细行分割线(0.5px)或使用24px空白间距
- 高度是动态的:像素
110 + (行数 × 90)
Layout: bars
布局:bars
Vertical bar chart with items ranked by height. Tick marks for data points along each bar.
按高度排序的垂直条形图,每个条形上带数据刻度标记。
Extraction Schema
提取Schema
typescript
{
layout: "bars"
title: string // Main title
subtitle?: string // Byline or source
description?: string // Explanatory text
bars: [{
label: string // Bar name (shown at bottom)
value: number // Determines bar height
color?: string // Override color
ticks?: [{ // Horizontal tick marks
position: number // 0-100 percentage up the bar
label: string // Tick label
}]
}]
sortOrder?: "asc" | "desc" // Default: "asc"
}typescript
{
layout: "bars"
title: string // 主标题
subtitle?: string // 署名或来源
description?: string // 说明文本
bars: [{
label: string // 条形名称(显示在底部)
value: number // 决定条形高度
color?: string // 覆盖颜色
ticks?: [{ // 水平刻度标记
position: number // 条形上0-100%的位置
label: string // 刻度标签
}]
}]
sortOrder?: "asc" | "desc" // 默认:"asc"升序
}SVG Template (transit style)
SVG模板(transit样式)
svg
<svg width="800" height="1200" xmlns="http://www.w3.org/2000/svg">
<!-- Canvas -->
<rect width="800" height="1200" fill="#E8DFD0"/>
<!-- Title block -->
<text x="60" y="80" fill="#2C2C2C" font-size="14" font-family="Helvetica, sans-serif" letter-spacing="3" text-decoration="underline">CHART TITLE</text>
<text x="60" y="120" fill="#2C2C2C" font-size="42" font-weight="bold" font-family="Georgia, serif">Main Title</text>
<!-- Bar (from bottom) -->
<rect x="60" y="500" width="80" height="600" fill="#D4A574"/>
<!-- Tick mark -->
<line x1="60" y1="700" x2="140" y2="700" stroke="#2C2C2C" stroke-width="0.5"/>
<text x="145" y="703" fill="#2C2C2C" font-size="9" font-family="Helvetica, sans-serif">Data point</text>
<!-- Bar label -->
<text x="100" y="1130" text-anchor="middle" fill="#2C2C2C" font-size="11" font-family="Helvetica, sans-serif">LABEL</text>
</svg>svg
<svg width="800" height="1200" xmlns="http://www.w3.org/2000/svg">
<!-- 画布 -->
<rect width="800" height="1200" fill="#E8DFD0"/>
<!-- 标题块 -->
<text x="60" y="80" fill="#2C2C2C" font-size="14" font-family="Helvetica, sans-serif" letter-spacing="3" text-decoration="underline">CHART TITLE</text>
<text x="60" y="120" fill="#2C2C2C" font-size="42" font-weight="bold" font-family="Georgia, serif">Main Title</text>
<!-- 条形(从底部开始) -->
<rect x="60" y="500" width="80" height="600" fill="#D4A574"/>
<!-- 刻度标记 -->
<line x1="60" y1="700" x2="140" y2="700" stroke="#2C2C2C" stroke-width="0.5"/>
<text x="145" y="703" fill="#2C2C2C" font-size="9" font-family="Helvetica, sans-serif">Data point</text>
<!-- 条形标签 -->
<text x="100" y="1130" text-anchor="middle" fill="#2C2C2C" font-size="11" font-family="Helvetica, sans-serif">LABEL</text>
</svg>Layout Notes
布局说明
- Tall format: 800x1200 or similar
- Bars start from same baseline
- Bar width: 60-100px, gap: 10-20px
- Sort ascending (shortest left) or descending
- Tick labels alternate sides or right-align
- 竖版格式:800x1200或类似尺寸
- 所有条形从同一基线开始
- 条形宽度:60-100px,间距:10-20px
- 可升序(最短在左)或降序排序
- 刻度标签可交替显示在两侧或右对齐
Layout: tiles
布局:tiles
Grid of colored tiles with icons and stat values. Dashboard-style multi-attribute display.
带图标和统计值的彩色磁贴网格,仪表盘风格的多属性展示。
Extraction Schema
提取Schema
typescript
{
layout: "tiles"
items: [{
title: string // Item name
subtitle?: string // Location/category
stats: [{
icon: string // elevation-up, elevation-down, area, calendar, people, rainfall, latitude, longitude
value: string // Display value
color?: string // Tile color
}]
}]
columns?: number // Tiles per row (default: 4)
rows?: number // Rows per item (default: 3)
}typescript
{
layout: "tiles"
items: [{
title: string // 项目名称
subtitle?: string // 位置/分类
stats: [{
icon: string // elevation-up, elevation-down, area, calendar, people, rainfall, latitude, longitude
value: string // 展示数值
color?: string // 磁贴颜色
}]
}]
columns?: number // 每行磁贴数(默认:4)
rows?: number // 每个项目的行数(默认:3)
}SVG Template (parks style)
SVG模板(parks样式)
svg
<svg width="1200" height="500" xmlns="http://www.w3.org/2000/svg">
<!-- Dark canvas -->
<rect width="1200" height="500" fill="#3D2E1F"/>
<!-- Tile -->
<rect x="40" y="40" width="85" height="85" rx="8" fill="#6B4423"/>
<!-- Icon (centered top) -->
<g transform="translate(82,60)">
<path d="M-8,4 L0,-4 L8,4" fill="none" stroke="#F5F0E6" stroke-width="3"/>
</g>
<!-- Value (centered bottom) -->
<text x="82" y="105" text-anchor="middle" fill="#F5F0E6" font-size="14" font-family="Helvetica, sans-serif">10,197 ft</text>
<!-- Item title below grid -->
<text x="200" y="430" text-anchor="middle" fill="#F5F0E6" font-size="18" font-weight="bold" font-family="Helvetica, sans-serif">ITEM NAME</text>
<text x="200" y="455" text-anchor="middle" fill="#F5F0E6" font-size="14" font-style="italic" font-family="Helvetica, sans-serif">Subtitle</text>
</svg>svg
<svg width="1200" height="500" xmlns="http://www.w3.org/2000/svg">
<!-- 暗色画布 -->
<rect width="1200" height="500" fill="#3D2E1F"/>
<!-- 磁贴 -->
<rect x="40" y="40" width="85" height="85" rx="8" fill="#6B4423"/>
<!-- 图标(顶部居中) -->
<g transform="translate(82,60)">
<path d="M-8,4 L0,-4 L8,4" fill="none" stroke="#F5F0E6" stroke-width="3"/>
</g>
<!-- 数值(底部居中) -->
<text x="82" y="105" text-anchor="middle" fill="#F5F0E6" font-size="14" font-family="Helvetica, sans-serif">10,197 ft</text>
<!-- 网格下方的项目标题 -->
<text x="200" y="430" text-anchor="middle" fill="#F5F0E6" font-size="18" font-weight="bold" font-family="Helvetica, sans-serif">ITEM NAME</text>
<text x="200" y="455" text-anchor="middle" fill="#F5F0E6" font-size="14" font-style="italic" font-family="Helvetica, sans-serif">Subtitle</text>
</svg>Layout Notes
布局说明
- Tile size: 80-100px square
- Gap: 8-12px, corner radius: rx="8"
- Icon in upper half, value in lower half
- Dark canvas, earth-tone tiles
- Title/subtitle centered below each item's grid
- 磁贴尺寸:80-100px正方形
- 间距:8-12px,圆角:rx="8"
- 图标在上半部分,数值在下半部分
- 暗色画布,大地色系磁贴
- 每个项目网格下方居中显示标题/副标题
Layout: gallery
布局:gallery
Grid of visual items with illustrations and captions. Bauhaus-inspired geometric compositions.
带插图和说明的可视化项目网格,包豪斯风格的几何构图。
Extraction Schema
提取Schema
typescript
{
layout: "gallery"
title?: string // Section title (italic, with period)
items: [{
label: string // Item label (e.g., "BOOK I.")
description: string // Brief description
illustration?: string // Hint: triangle, square, circle, polygon, grid
}]
columns?: number // Items per row (default: 3)
}typescript
{
layout: "gallery"
title?: string // 章节标题(斜体,带句号)
items: [{
label: string // 项目标签(例如 "BOOK I.")
description: string // 简短说明
illustration?: string // 提示:triangle, square, circle, polygon, grid
}]
columns?: number // 每行项目数(默认:3)
}SVG Template (euclid style)
SVG模板(euclid样式)
svg
<svg width="900" height="700" xmlns="http://www.w3.org/2000/svg">
<!-- Cream canvas -->
<rect width="900" height="700" fill="#F5EFE0"/>
<!-- Title -->
<text x="450" y="60" text-anchor="middle" fill="#2C2C2C" font-size="24" font-style="italic" font-family="Georgia, serif">TITLE.</text>
<!-- Item illustration (Bauhaus colors) -->
<g transform="translate(150,180)">
<polygon points="0,-80 80,60 -80,60" fill="none" stroke="#1A1A1A" stroke-width="2"/>
<rect x="-30" y="-20" width="40" height="40" fill="#D64045"/>
<circle cx="20" cy="30" r="25" fill="#1B4B8A"/>
</g>
<!-- Caption -->
<text x="150" y="360" text-anchor="middle" fill="#2C2C2C" font-size="16" font-family="Georgia, serif">ITEM I.</text>
<text x="150" y="385" text-anchor="middle" fill="#2C2C2C" font-size="14" font-family="Georgia, serif">Description text</text>
</svg>svg
<svg width="900" height="700" xmlns="http://www.w3.org/2000/svg">
<!-- 奶油色画布 -->
<rect width="900" height="700" fill="#F5EFE0"/>
<!-- 标题 -->
<text x="450" y="60" text-anchor="middle" fill="#2C2C2C" font-size="24" font-style="italic" font-family="Georgia, serif">TITLE.</text>
<!-- 项目插图(包豪斯配色) -->
<g transform="translate(150,180)">
<polygon points="0,-80 80,60 -80,60" fill="none" stroke="#1A1A1A" stroke-width="2"/>
<rect x="-30" y="-20" width="40" height="40" fill="#D64045"/>
<circle cx="20" cy="30" r="25" fill="#1B4B8A"/>
</g>
<!-- 说明 -->
<text x="150" y="360" text-anchor="middle" fill="#2C2C2C" font-size="16" font-family="Georgia, serif">ITEM I.</text>
<text x="150" y="385" text-anchor="middle" fill="#2C2C2C" font-size="14" font-family="Georgia, serif">Description text</text>
</svg>Layout Notes
布局说明
- Grid: typically 3 columns, 2 rows
- Illustration area: 180-220px
- Bauhaus colors: red #D64045, blue #1B4B8A, yellow #F5B800, black #1A1A1A
- Abstract geometric compositions
- Roman numerals for labels (I, II, III...)
- 网格:通常3列2行
- 插图区域:180-220px
- 包豪斯配色:红色#D64045、蓝色#1B4B8A、黄色#F5B800、黑色#1A1A1A
- 抽象几何构图
- 标签使用罗马数字(I, II, III...)
Layout: timeline
布局:timeline
Vertical timeline with central spine and alternating event cards. Best for chronological histories.
带中心轴线和交替事件卡片的垂直时间线,最适合按时间排序的历史内容。
Extraction Schema
提取Schema
typescript
{
layout: "timeline"
title?: string // Optional main title
subtitle?: string // Optional byline or date range
events: [{
date: string // Year or date (e.g., "1995", "March 2020")
title: string // Event title
description: string // Brief description (1-2 sentences)
side?: "left" | "right" // Override alternation
}]
}typescript
{
layout: "timeline"
title?: string // 可选主标题
subtitle?: string // 可选署名或日期范围
events: [{
date: string // 年份或日期(例如 "1995", "2020年3月")
title: string // 事件标题
description: string // 简短说明(1-2句话)
side?: "left" | "right" // 覆盖交替排列规则
}]
}SVG Template (timber style)
SVG模板(timber样式)
svg
<svg width="800" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- Canvas -->
<rect width="800" height="{height}" fill="#F5F0E6"/>
<!-- Title -->
<text x="400" y="60" text-anchor="middle" fill="#2C2C2C" font-size="28" font-weight="bold" font-family="Georgia, serif">{title}</text>
<text x="400" y="90" text-anchor="middle" fill="#8B7355" font-size="14" font-style="italic" font-family="Georgia, serif">{subtitle}</text>
<!-- Central spine -->
<line x1="400" y1="120" x2="400" y2="{spineEnd}" stroke="#8B7355" stroke-width="2"/>
<!-- Timeline node (circle on spine) -->
<circle cx="400" cy="180" r="8" fill="#8B7355"/>
<!-- Date label (alternates sides) -->
<text x="360" y="185" text-anchor="end" fill="#8B7355" font-size="14" font-weight="bold" font-family="Georgia, serif">1995</text>
<!-- Event card (right side) -->
<rect x="420" y="150" width="320" height="80" rx="4" fill="#FAFAF8" stroke="#D4C4A8" stroke-width="1"/>
<text x="440" y="180" fill="#2C2C2C" font-size="16" font-weight="bold" font-family="Georgia, serif">{event.title}</text>
<text x="440" y="205" fill="#5C5C5C" font-size="13" font-family="Georgia, serif">
<tspan x="440" dy="0">{description line 1}</tspan>
<tspan x="440" dy="18">{description line 2}</tspan>
</text>
<!-- Connector line to card -->
<line x1="408" y1="180" x2="420" y2="180" stroke="#8B7355" stroke-width="1"/>
<!-- Event card (left side, next event) -->
<rect x="60" y="280" width="320" height="80" rx="4" fill="#FAFAF8" stroke="#D4C4A8" stroke-width="1"/>
<!-- ... same structure, date on right of spine -->
<!-- Repeat alternating pattern -->
</svg>svg
<svg width="800" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- 画布 -->
<rect width="800" height="{height}" fill="#F5F0E6"/>
<!-- 标题 -->
<text x="400" y="60" text-anchor="middle" fill="#2C2C2C" font-size="28" font-weight="bold" font-family="Georgia, serif">{title}</text>
<text x="400" y="90" text-anchor="middle" fill="#8B7355" font-size="14" font-style="italic" font-family="Georgia, serif">{subtitle}</text>
<!-- 中心轴线 -->
<line x1="400" y1="120" x2="400" y2="{spineEnd}" stroke="#8B7355" stroke-width="2"/>
<!-- 时间线节点(轴线上的圆圈) -->
<circle cx="400" cy="180" r="8" fill="#8B7355"/>
<!-- 日期标签(交替在两侧) -->
<text x="360" y="185" text-anchor="end" fill="#8B7355" font-size="14" font-weight="bold" font-family="Georgia, serif">1995</text>
<!-- 事件卡片(右侧) -->
<rect x="420" y="150" width="320" height="80" rx="4" fill="#FAFAF8" stroke="#D4C4A8" stroke-width="1"/>
<text x="440" y="180" fill="#2C2C2C" font-size="16" font-weight="bold" font-family="Georgia, serif">{event.title}</text>
<text x="440" y="205" fill="#5C5C5C" font-size="13" font-family="Georgia, serif">
<tspan x="440" dy="0">{description line 1}</tspan>
<tspan x="440" dy="18">{description line 2}</tspan>
</text>
<!-- 连接到卡片的线 -->
<line x1="408" y1="180" x2="420" y2="180" stroke="#8B7355" stroke-width="1"/>
<!-- 事件卡片(左侧,下一个事件) -->
<rect x="60" y="280" width="320" height="80" rx="4" fill="#FAFAF8" stroke="#D4C4A8" stroke-width="1"/>
<!-- ... 结构相同,日期在轴线右侧 -->
<!-- 重复交替模式 -->
</svg>Layout Notes
布局说明
- Spine runs vertically through center
- Cards alternate left/right
- Node circles mark each event on spine
- Date labels opposite to card side
- Card height: 70-100px depending on content
- Vertical spacing: 130-160px between events
- Dynamic height: pixels
120 + (eventCount × 150)
- 轴线垂直贯穿中心
- 卡片左右交替排列
- 节点圆圈标记轴线上的每个事件
- 日期标签在卡片对侧
- 卡片高度:70-100px,依内容而定
- 垂直间距:事件之间间隔130-160px
- 动态高度:像素
120 + (事件数 × 150)
Layout: process
布局:process
Sequential flowchart with numbered steps and connecting arrows. Best for how-to guides and workflows.
带编号步骤和连接箭头的顺序流程图,最适合操作指南和工作流。
Extraction Schema
提取Schema
typescript
{
layout: "process"
title?: string // Optional main title
subtitle?: string // Optional description
steps: [{
number: number // Step number (1, 2, 3...)
title: string // Step title
description: string // Brief description (1-2 sentences)
icon?: string // Icon hint: gear, code, check, etc.
}]
columns?: number // Steps per row (default: 1 for vertical)
}typescript
{
layout: "process"
title?: string // 可选主标题
subtitle?: string // 可选说明
steps: [{
number: number // 步骤编号(1, 2, 3...)
title: string // 步骤标题
description: string // 简短说明(1-2句话)
icon?: string // 图标提示:gear, code, check等
}]
columns?: number // 每行步骤数(默认:1,垂直排列)
}SVG Template (preston style)
SVG模板(preston样式)
svg
<svg width="800" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- Canvas -->
<rect width="800" height="{height}" fill="#F5F0E6"/>
<!-- Title -->
<text x="400" y="60" text-anchor="middle" fill="#2C2C2C" font-size="28" font-weight="bold" font-family="Helvetica, sans-serif">{title}</text>
<text x="400" y="90" text-anchor="middle" fill="#6B6B6B" font-size="14" font-family="Helvetica, sans-serif">{subtitle}</text>
<!-- Step 1 -->
<g transform="translate(100, 140)">
<!-- Number circle -->
<circle cx="30" cy="30" r="24" fill="#4A6741" stroke="none"/>
<text x="30" y="38" text-anchor="middle" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="Helvetica, sans-serif">1</text>
<!-- Step content -->
<text x="70" y="25" fill="#2C2C2C" font-size="18" font-weight="bold" font-family="Helvetica, sans-serif">{step.title}</text>
<text x="70" y="50" fill="#5C5C5C" font-size="14" font-family="Helvetica, sans-serif">
<tspan x="70" dy="0">{description line 1}</tspan>
<tspan x="70" dy="20">{description line 2}</tspan>
</text>
</g>
<!-- Connector arrow (vertical) -->
<line x1="130" y1="220" x2="130" y2="260" stroke="#4A6741" stroke-width="2"/>
<polygon points="130,270 125,260 135,260" fill="#4A6741"/>
<!-- Step 2 -->
<g transform="translate(100, 280)">
<circle cx="30" cy="30" r="24" fill="#4A6741"/>
<text x="30" y="38" text-anchor="middle" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="Helvetica, sans-serif">2</text>
<!-- ... same structure -->
</g>
<!-- Repeat for each step -->
</svg>svg
<svg width="800" height="{dynamicHeight}" xmlns="http://www.w3.org/2000/svg">
<!-- 画布 -->
<rect width="800" height="{height}" fill="#F5F0E6"/>
<!-- 标题 -->
<text x="400" y="60" text-anchor="middle" fill="#2C2C2C" font-size="28" font-weight="bold" font-family="Helvetica, sans-serif">{title}</text>
<text x="400" y="90" text-anchor="middle" fill="#6B6B6B" font-size="14" font-family="Helvetica, sans-serif">{subtitle}</text>
<!-- 步骤1 -->
<g transform="translate(100, 140)">
<!-- 编号圆圈 -->
<circle cx="30" cy="30" r="24" fill="#4A6741" stroke="none"/>
<text x="30" y="38" text-anchor="middle" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="Helvetica, sans-serif">1</text>
<!-- 步骤内容 -->
<text x="70" y="25" fill="#2C2C2C" font-size="18" font-weight="bold" font-family="Helvetica, sans-serif">{step.title}</text>
<text x="70" y="50" fill="#5C5C5C" font-size="14" font-family="Helvetica, sans-serif">
<tspan x="70" dy="0">{description line 1}</tspan>
<tspan x="70" dy="20">{description line 2}</tspan>
</text>
</g>
<!-- 连接箭头(垂直) -->
<line x1="130" y1="220" x2="130" y2="260" stroke="#4A6741" stroke-width="2"/>
<polygon points="130,270 125,260 135,260" fill="#4A6741"/>
<!-- 步骤2 -->
<g transform="translate(100, 280)">
<circle cx="30" cy="30" r="24" fill="#4A6741"/>
<text x="30" y="38" text-anchor="middle" fill="#FAFAF8" font-size="20" font-weight="bold" font-family="Helvetica, sans-serif">2</text>
<!-- ... 结构相同 -->
</g>
<!-- 重复生成每个步骤 -->
</svg>Layout Notes
布局说明
- Numbered circles (24-30px radius) on left
- Step content to right of number
- Vertical arrows connect steps
- Arrow length: 40-60px
- Step spacing: 140-160px vertical
- Accent color for numbers and arrows
- Dynamic height: pixels
120 + (stepCount × 150) - For horizontal layout (columns > 1): arrange in rows with horizontal arrows
- 左侧为编号圆圈(半径24-30px)
- 步骤内容在编号右侧
- 垂直箭头连接步骤
- 箭头长度:40-60px
- 步骤间距:垂直间隔140-160px
- 编号和箭头使用强调色
- 动态高度:像素
120 + (步骤数 × 150) - 水平布局(列数>1):按行排列,使用水平箭头连接
Icon Library
图标库
Simple SVG paths for common concepts. Use within a centered in the icon circle.
<g transform="translate(x,y)">通用概念的简单SVG路径,放在中,居中于图标圆圈内。
<g transform="translate(x,y)">Available Icons
可用图标
svg
<!-- search: magnifying glass -->
<path d="M-6,-6 L6,6 M-4,0 a6,6 0 1,1 0,0.01" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round"/>
<!-- document: stacked pages -->
<path d="M-6,-8 L4,-8 L6,-6 L6,8 L-6,8 Z M-4,-5 L3,-5 M-4,-1 L3,-1 M-4,3 L1,3" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- data: circular arrows (refresh) -->
<path d="M0,-7 A7,7 0 0,1 6,3.5 M6,3.5 L4,0 M6,3.5 L9,2 M0,7 A7,7 0 0,1 -6,-3.5 M-6,-3.5 L-4,0 M-6,-3.5 L-9,-2" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- draft: pencil -->
<path d="M-6,8 L-2,8 L8,-6 L4,-6 Z M4,0 L0,0" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- strategy: chess rook -->
<path d="M-5,8 L5,8 L5,6 L4,5 L4,2 L5,1 L5,-4 L3,-4 L3,-7 L1,-7 L1,-4 L-1,-4 L-1,-7 L-3,-7 L-3,-4 L-5,-4 L-5,1 L-4,2 L-4,5 L-5,6 Z" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<!-- blocks: stacked cubes -->
<path d="M0,-8 L8,0 L0,8 L-8,0 Z M-8,0 L0,4 L8,0 M0,4 L0,8" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- lightbulb: idea -->
<path d="M0,-8 L0,-6 M-6,-4 L-4,-3 M6,-4 L4,-3 M-4,6 L4,6 M-3,8 L3,8 M-4,2 Q-6,-2 0,-6 Q6,-2 4,2 L3,4 L-3,4 Z" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- check: checkmark in circle -->
<circle cx="0" cy="0" r="8" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-4,0 L-1,3 L5,-4" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<!-- warning: triangle exclamation -->
<path d="M0,-7 L8,7 L-8,7 Z M0,0 L0,2 M0,4 L0,5" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<!-- code: angle brackets -->
<path d="M-3,-6 L-8,0 L-3,6 M3,-6 L8,0 L3,6" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<!-- users: two people -->
<circle cx="-3" cy="-4" r="3" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-9,6 Q-9,0 -3,0 Q3,0 3,6" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<circle cx="5" cy="-2" r="2.5" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M1,6 Q2,2 5,2 Q9,2 9,6" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<!-- gear: cog wheel -->
<circle cx="0" cy="0" r="3" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M0,-8 L0,-5 M0,5 L0,8 M-8,0 L-5,0 M5,0 L8,0 M-5.6,-5.6 L-3.5,-3.5 M3.5,3.5 L5.6,5.6 M5.6,-5.6 L3.5,-3.5 M-3.5,3.5 L-5.6,5.6" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round"/>
<!-- chat: speech bubble -->
<path d="M-8,-6 L8,-6 L8,4 L2,4 L-2,8 L-2,4 L-8,4 Z" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- globe: world -->
<circle cx="0" cy="0" r="8" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-8,0 L8,0 M0,-8 Q-4,0 0,8 Q4,0 0,-8" fill="none" stroke="#4A6741" stroke-width="1"/>svg
<!-- search: 放大镜 -->
<path d="M-6,-6 L6,6 M-4,0 a6,6 0 1,1 0,0.01" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round"/>
<!-- document: 堆叠页面 -->
<path d="M-6,-8 L4,-8 L6,-6 L6,8 L-6,8 Z M-4,-5 L3,-5 M-4,-1 L3,-1 M-4,3 L1,3" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- data: 循环箭头(刷新) -->
<path d="M0,-7 A7,7 0 0,1 6,3.5 M6,3.5 L4,0 M6,3.5 L9,2 M0,7 A7,7 0 0,1 -6,-3.5 M-6,-3.5 L-4,0 M-6,-3.5 L-9,-2" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- draft: 铅笔 -->
<path d="M-6,8 L-2,8 L8,-6 L4,-6 Z M4,0 L0,0" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- strategy: 国际象棋车 -->
<path d="M-5,8 L5,8 L5,6 L4,5 L4,2 L5,1 L5,-4 L3,-4 L3,-7 L1,-7 L1,-4 L-1,-4 L-1,-7 L-3,-7 L-3,-4 L-5,-4 L-5,1 L-4,2 L-4,5 L-5,6 Z" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<!-- blocks: 堆叠立方体 -->
<path d="M0,-8 L8,0 L0,8 L-8,0 Z M-8,0 L0,4 L8,0 M0,4 L0,8" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- lightbulb: 灯泡(创意) -->
<path d="M0,-8 L0,-6 M-6,-4 L-4,-3 M6,-4 L4,-3 M-4,6 L4,6 M-3,8 L3,8 M-4,2 Q-6,-2 0,-6 Q6,-2 4,2 L3,4 L-3,4 Z" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round"/>
<!-- check: 圆圈对勾 -->
<circle cx="0" cy="0" r="8" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-4,0 L-1,3 L5,-4" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<!-- warning: 三角形感叹号 -->
<path d="M0,-7 L8,7 L-8,7 Z M0,0 L0,2 M0,4 L0,5" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<!-- code: 尖括号 -->
<path d="M-3,-6 L-8,0 L-3,6 M3,-6 L8,0 L3,6" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<!-- users: 两个人 -->
<circle cx="-3" cy="-4" r="3" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-9,6 Q-9,0 -3,0 Q3,0 3,6" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<circle cx="5" cy="-2" r="2.5" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M1,6 Q2,2 5,2 Q9,2 9,6" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<!-- gear: 齿轮 -->
<circle cx="0" cy="0" r="3" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M0,-8 L0,-5 M0,5 L0,8 M-8,0 L-5,0 M5,0 L8,0 M-5.6,-5.6 L-3.5,-3.5 M3.5,3.5 L5.6,5.6 M5.6,-5.6 L3.5,-3.5 M-3.5,3.5 L-5.6,5.6" fill="none" stroke="#4A6741" stroke-width="2" stroke-linecap="round"/>
<!-- chat: 对话气泡 -->
<path d="M-8,-6 L8,-6 L8,4 L2,4 L-2,8 L-2,4 L-8,4 Z" fill="none" stroke="#4A6741" stroke-width="1.5" stroke-linejoin="round"/>
<!-- globe: 地球 -->
<circle cx="0" cy="0" r="8" fill="none" stroke="#4A6741" stroke-width="1.5"/>
<path d="M-8,0 L8,0 M0,-8 Q-4,0 0,8 Q4,0 0,-8" fill="none" stroke="#4A6741" stroke-width="1"/>Icon Usage
图标使用说明
- Place icon circle at desired position
- Add icon paths inside a with
<g>where cx,cy is the circle centertransform="translate(cx,cy)" - Match the icon hint from extracted data to the icon name
- 将图标圆圈放在目标位置
- 将图标路径放在标签内,设置
<g>,其中cx、cy是圆圈的中心坐标transform="translate(cx,cy)" - 将提取数据中的图标提示与图标名称匹配
Important Notes
重要注意事项
- Text wrapping: Split long text into elements with
<tspan>for body textdy="22" - Dynamic height: Adjust canvas height based on content
- stat-block notes:
- Section heading color: rotate through accent colors
- Stats layout: center N stats evenly across content width
- No shadows, no gradients, no rounded corners
- All styles inline (SVG has no external CSS support via rsvg-convert)
- olive layout notes:
- Always include shadow filter in defs
- Primary cards use light text (#FAFAF8)
- Secondary cards use dark text (#2C2C2C)
- Icons centered in white circles
- Rounded corners on all cards (rx="16")
- werner layout notes:
- Serif typography throughout (Georgia)
- Italic text for descriptive columns
- Underlined column headers
- Swatches need stroke if color is close to canvas
- Parts dots can overlap slightly
- transit layout notes:
- Tall format (800x1200+)
- Bars from same baseline, sorted by value
- Tick marks with small labels
- Title block top-left with description
- parks layout notes:
- Dark brown canvas
- Earth-tone tiles in grid
- Icon + value per tile
- Light text on dark tiles, dark on light
- euclid layout notes:
- Bauhaus palette: red, blue, yellow, black
- Geometric illustrations (abstract compositions)
- Serif italic title with period
- Roman numeral labels
- 文本折行: 长文本拆分为元素,正文文本设置
<tspan>dy="22" - 动态高度: 根据内容调整画布高度
- stat-block注意事项:
- 章节标题颜色:循环使用强调色
- 统计布局:N个统计项在内容宽度上均匀居中排布
- 无阴影、无渐变、无圆角
- 所有样式内联(rsvg-convert不支持SVG外部CSS)
- olive布局注意事项:
- 始终在defs中包含阴影滤镜
- 主卡片使用浅色文本(#FAFAF8)
- 次卡片使用深色文本(#2C2C2C)
- 图标居中在白色圆圈内
- 所有卡片使用圆角(rx="16")
- werner布局注意事项:
- 全程使用衬线字体(Georgia)
- 描述列使用斜体文本
- 列头带下划线
- 如果色卡颜色接近画布颜色需要加描边
- 调色板圆点可以轻微重叠
- transit布局注意事项:
- 竖版格式(800x1200+)
- 条形从同一基线开始,按数值排序
- 刻度标记带小标签
- 标题块在左上角,附带说明
- parks布局注意事项:
- 深棕色画布
- 网格中使用大地色系磁贴
- 每个磁贴包含图标+数值
- 深色磁贴用浅色文本,浅色磁贴用深色文本
- euclid布局注意事项:
- 包豪斯调色板:红、蓝、黄、黑
- 几何插图(抽象构图)
- 衬线斜体标题带句号
- 使用罗马数字标签
Conversion
转换
After writing SVG file, convert to PNG:
bash
rsvg-convert -w 2000 input.svg -o output.pngThen open:
bash
open output.png编写完SVG文件后,转换为PNG:
bash
rsvg-convert -w 2000 input.svg -o output.png然后打开文件:
bash
open output.pngExamples
示例
Decision tree input: "When should I use Perplexity vs ChatGPT?"
- Detects: decision-tree layout
- Question bubble: "When should I use Perplexity vs ChatGPT?"
- Branch 1: "Use Perplexity" with research-focused bullets
- Branch 2: "Use ChatGPT" with creative/coding bullets
Comparison input: "Compare React vs Vue for building web apps"
- Detects: comparison layout
- Two cards side by side with pros/features of each
Stat-block input: "Key findings from our user research study"
- Detects: stat-block layout (default)
- Classical sections with statistics and takeaway
Catalog input: "Show me the blues from Werner's color chart"
- Detects: catalog layout
- Table with color swatches, names, natural references, palette dots
Bars input: "Rank the 5 tallest mountains in Europe"
- Detects: bars layout
- Vertical bars sorted by height, tick marks for key elevations
Tiles input: "Show stats for 3 national parks: elevation, area, visitors, rainfall"
- Detects: tiles layout
- Grid of colored tiles with icons and values for each park
Gallery input: "Overview of the 6 books of Euclid's Elements"
- Detects: gallery layout
- Grid of geometric illustrations with captions
决策树输入: "我应该什么时候用Perplexity vs ChatGPT?"
- 检测为:decision-tree布局
- 问题气泡:"我应该什么时候用Perplexity vs ChatGPT?"
- 分支1:"使用Perplexity",附带研究相关的要点
- 分支2:"使用ChatGPT",附带创意/编码相关的要点
对比输入: "对比React和Vue用于构建Web应用的差异"
- 检测为:comparison布局
- 两个并排卡片,分别展示各自的优点/特性
统计块输入: "用户研究的核心发现"
- 检测为:stat-block布局(默认)
- 古典章节布局,附带统计数据和结论
目录输入: "展示Werner色卡中的蓝色系"
- 检测为:catalog布局
- 表格包含色卡、名称、自然参考、调色板圆点
条形图输入: "排名欧洲最高的5座山脉"
- 检测为:bars布局
- 垂直条形按高度排序,关键海拔带刻度标记
磁贴输入: "展示3个国家公园的统计数据:海拔、面积、游客量、降雨量"
- 检测为:tiles布局
- 彩色磁贴网格,每个公园对应带图标和数值的磁贴
画廊输入: "欧几里得几何原本6卷概述"
- 检测为:gallery布局
- 几何插图网格,附带说明