Install
openclaw skills install @skillmelody/article-html-to-pptBuild and QA editable PPT decks locally; probes required tools/fonts, runs subprocess renderers in isolated work/output folders, and uses cloud export only with explicit consent.
openclaw skills install @skillmelody/article-html-to-pptConvert articles, Markdown drafts, HTML pages, WeChat drafts, PRDs, automation plans, knowledge posts, design specs, and review-approved manuscripts into polished, low-rework, persona-fit slide decks.
Public identity:
MeowClaw 夜猫 PPT 工坊MeowClaw PPTSmithmeowclaw-pptsmitharticle-html-to-ppt, meowclaw-decksmithKeep the OpenClaw skill route and directory name as article-html-to-ppt until all installed clients, ClawHub versions, GitHub paths, and historical workflows have migrated. Treat article-html-to-ppt and meowclaw-decksmith as backward-compatible aliases, not as the primary public name.
Version 3.0.2 is Standard production-ready on the verified macOS + LibreOffice acceptance environment. It retains v3.0.1's dual-path generation, visual narrative, quality gates, public PMO runtime, and verified Standard boundary. Registry packages exclude PMO tests, generated decks, rendered PDFs/images, QA logs and caches. The distributed source is subject to the bundled MeowClaw Lab Non-Commercial Source License v1.0: third-party commercial use requires prior written permission, while MeowClaw Lab and its written designees retain commercial rights. Never present this as universal Premium final readiness: Premium still requires a compatible real renderer, readback, zero QA errors, rubric pass, and disclosed fallbacks on the target environment. See docs/v3.0.2-license-notice.md for the license boundary.
.ppt-work and output directories; these directories are recreated during guarded runs, so never point them at a workspace root or an unrelated folder.deck.pptx and runtime-result.json inside the selected output directory.Version 2.1 extends the 2.0.7 connector guarantees; it does not replace them:
python_pptx supports declared straight, orthogonal, and curved connector routes.straight route only and must fail closed for orthogonal or curved requests.references/connector-routing-and-topology-gate.md and references/native-connector-and-visual-quality-gate.md as the authoritative compatibility gates.Default delivery is hybrid editable: polished material/background layers may be raster, SVG, or generated image components, while message-bearing content remains editable PowerPoint objects. Avoid both extremes: screenshot-only decks that cannot be edited, and pure native-object decks that look like rough wireframes.
Optimize in this order:
fast, standard, or premium.Use this chain for serious decks. For the v2 one-command Standard route, run scripts/run_pipeline.py with --builder auto|python_pptx|pptxgenjs, --profile standard, isolated --work-dir, and a unique --output-dir. Production runs select one Builder; do not routinely generate two user finals. The dual-Builder execution is acceptance/regression evidence only, with python_pptx as the canonical accepted deck.
source/article/design brief
-> resolve production profile
-> content analysis and evidence inventory
-> slide storyline and judgment titles
-> expression mode gate
-> slide_manifest.json with expression plan
-> style selection and page archetype mapping
-> STYLE & PALETTE CONFIRMATION GATE (confirm with user OR match reference)
-> detailed design specification
-> visual priority map + deletion/noise budget
-> capability probe for builders/renderers/fonts
-> component registry lookup + delivery-plan route resolution
-> builder adapter selection with capability report
-> high-fidelity reference for key pages when polish matters
-> editable/hybrid PPT implementation
-> render/readback QA
-> rubric scoring + benchmark calibration where relevant
-> revision loop
-> package user-facing delivery + delivery-manifest.json
Two paths, one decision. The user controls which path is used.
LLM writes a standalone Python build script (build_deck.py) using python-pptx directly.
Best for: important presentations, board decks, investor pitches, anything where visual
refinement matters more than reproducibility.
Trigger: User says 「精细做」「高定模式」「手写代码生成」「和之前 State of AI 一样」「质量优先」
Execution:
python3 build_deck.py
Quality: Highest visual quality — full control over spacing, colors, positioning. No pipeline overhead. But: one-shot execution, no QA gate, no fallback.
Template: Use the consulting-light palette (#051C2C primary, #2251FF accent, white bg).
Slide dimensions: 13.333×7.5 inches (16:9). Reference patterns:
LLM generates ppt-ir.json, then run_pipeline.py builds, validates, and delivers.
Best for: batch generation, complex components (diagrams, PMO, PRD), standardized output,
scenarios requiring QA traceability.
Trigger: Default path. User says 「快速生成」「标准模式」「流水线模式」
Execution:
python3 scripts/run_pipeline.py --ppt-ir ppt-ir.json --style style-contract.json \
--profile standard --builder python_pptx --work-dir .ppt-work --output-dir final/
Quality: Structurally guaranteed only after the IR completeness gate passes (contract validation, source traceability, QA gates, fallback chains). A sparse IR does not become professional merely by rendering: it must carry source-bound primary data and independently source-bound evidence, or pipeline delivery stops with named blockers.
For each non-navigation data/judgment slide, write supporting_evidence explicitly in ppt-ir.json. Each item needs non-duplicate content plus its own non-empty source_refs; this is the only permitted deterministic enrichment input. Never turn title, message, or judgment into evidence automatically. Start from templates/ppt-ir-source-bound-evidence-template.json when authoring Path B IR for a lower-capability model.
Visual quality remains limited by builder rendering capabilities.
PPTSMITH_PROFILE_NOTICE, continue without waiting高配模型走 Path A(代码路径),低配模型走 Path B(IR 路径)。两路径都有 builder 保障底线质量。
| 层级 | 保障内容 | 高配模型 | 低配模型 |
|---|---|---|---|
| LLM 层 | 内容规划、数据密度、叙事结构 | 模型能力强 → 质量上限高 | 模型能力弱 → IR 密度可能不足 |
| Builder 层 | 封面、图表、表格、卡片渲染 | 代码直接控制 → 精细排版 | IR → builder 动态布局 → 稳定质量 |
| Pipeline 层 | 合约校验、QA 门禁、渲染回读 | 无(代码路径跳过) | 全量 QA + 视觉修订 |
核心保障:低配模型的稀疏 IR 不能被 Builder 的配色、斑马纹或字号调整“补救”为专业交付。数据页必须含来源绑定的主数据对象与独立证据;判断页必须含独立来源证据;图表类别与数列必须自洽。否则 Pipeline 在 ir_quality_floor 以命名 blocker 停止,绝不输出 verified。封面根据 visual plan 的 professional_route 自动选择风格(战略决策→navy hero,研究报告→minimal light)。尾页自动生成感谢页。
When the user's request matches PMO/governance signals, automatically route to the PMO builder (private-pmo-pack/scripts/build_pmo_deck.py) instead of the generic pipeline.
| Category | Signals |
|---|---|
| Keywords | 周报、月报、项目状态、里程碑、RAID、RACI、风险矩阵、决策记录、指导委员会、SteerCo、干系人、燃尽图、Sprint Review、站会、项目治理、项目管理、PMO |
| Material type | 项目计划、RAID log、状态报告、Sprint 数据、里程碑清单 |
| User intent | 「帮我做个项目周报」「生成 PMO dashboard」「项目管理汇报」 |
| Audience | 项目赞助人、PMO、指导委员会、项目经理 |
Generate a PMO domain JSON conforming to private-pmo-pack/schemas/pmo-input.schema.json, then run:
python3 private-pmo-pack/scripts/build_pmo_deck.py --input pmo-input.json --output deck.pptx
The PMO builder produces 11 standard page types: Cover, Executive Dashboard, Roadmap, Milestones, RAID Log, Workstreams, RACI Matrix, Risk Heat Map, Decision Page, KPI Dashboard, Action Tracker.
Every generated deck MUST include a final quality-disclaimer page as the last slide. This page must contain:
github.com/MeowClawLab (技术问题/功能请求)This page should be auto-appended by the builder; the LLM must not generate it as part of the IR.
DO NOT directly generate ppt-ir.json. Instead, generate content-analysis + storyline, then let the visual narrative pipeline plan the IR.
content-analysis.json{
"title": "文档标题",
"summary": "一句话摘要",
"evidence_types": ["statistics", "comparison", "trend", "case_study"],
"relationship_types": ["adoption_gap", "cause_effect", "heatmap"],
"project_governance_terms": [],
"audience": "目标受众描述",
"key_findings": ["发现1", "发现2", ...]
}
evidence_types: pick from statistics, comparison, trend, case_study, forecast, benchmark, surveyrelationship_types: pick from adoption_gap, cause_effect, heatmap, capability_maturity, system_boundary, data_flow, dependency, layer, comparison, trendproject_governance_terms: non-empty triggers PMO route; typical values: ["steering committee", "milestone", "RAID", "RACI", "workstream"]key_findings: 3-8 items; the most important conclusions from the documentstoryline.json{
"title": "PPT 标题",
"slides": [
{
"id": "S01",
"role": "cover",
"message": "核心信息或标题",
"audience_question": "这页回答受众的什么问题?",
"evidence_refs": ["src-K1"],
"priority": "key"
},
...
]
}
Page count rule: information density × audience context = page count. Not fixed at 12.
Slide roles (pick the most specific that fits):
cover — title + subtitle + date/sourcedata — chart, table, or data visualizationjudgment — key insight or management conclusioncomparison — side-by-side or before/afterevidence — supporting proof or case studyroadmap — timeline, phases, or sequencedecision — options + recommendationclosing — summary + next stepspriority: key for critical slides, supporting for supplementary
source-context-brief.json{
"schema_version": "1.0",
"source_id": "简短标识",
"primary_audience": ["executive", "management"],
"delivery_objective": "decide",
"source_material_type": "research_report",
"evidence_profile": ["statistics", "trend"],
"delivery_scenario": "strategy_review"
}
primary_audience: executive, management, analyst, investor, engineer, publicdelivery_objective: decide, inform, recommend, align, teachsource_material_type: research_report, strategy_memo, project_plan, prd, pitch_deck, articledelivery_scenario: strategy_review, board_meeting, client_pitch, status_review, trainingpython3 scripts/run_pipeline.py \
--requirements requirements.json \
--ppt-ir ppt-ir.json \
--style style-contract.json \
--content-analysis content-analysis.json \
--storyline storyline.json \
--source-context-brief source-context-brief.json \
--profile standard \
--builder python_pptx \
--work-dir .ppt-work \
--output-dir final/
The pipeline will:
If visual narrative pipeline is not available or the topic is too simple, fall back to directly generating ppt-ir.json with the generic cover/data/judgment/closing structure. But always prefer the visual narrative path for professional-quality output.
The critical rules are:
deck.pptx exists..ppt-work/.final without real render evidence, readback, zero QA errors, and rubric pass.Resolve the profile before artifact planning:
python3 scripts/resolve_production_profile.py \
--requirements requirements.json \
--ppt-ir .ppt-work/contracts/ppt-ir.json \
--output .ppt-work/contracts/production-profile.json
Use only the artifacts required by the selected profile:
fast: internal draft / content validation / simple article / explicit speed request.standard: formal internal report or ordinary client/product/technical/business deck.premium: public release, high-value client, template asset, strong brand requirement, complex diagrams, or explicit full validation request.User override wins. Record the override and reason codes. Keep all internal work under .ppt-work/; deliver only the user-facing package plus delivery-manifest.json. Preserve .ppt-work/ on failure. Premium should preserve it by default.
style_id alone is too abstract. The same style name produces visibly different decks across models because style descriptions only encode mood (e.g. "restrained color"). Every serious deck must resolve a complete style-contract.json before build. The contract is the source of truth for color, typography, grid, spacing, shape, shadows, cards, tables, charts, diagrams, images, icons, footer, density limits, effects, and forbidden drift.
Before building, do one of:
style_id or an alias. If the user does not pick, fall back to the default fixture for the recommended style.Record the chosen style_id, compatibility alias or legacy palette source, and the resolved tokens in style-contract.json before any visual implementation. The build must read design parameters from this contract; do not invent hex values, font sizes, margins, radius values, table styles, chart colors, connector widths, crop modes, or footer styles at build time.
The contract must contain:
{
"schema_version": "2.0",
"style_id": "consulting-light|product-report|technical-blueprint|consulting-blueprint-hybrid|editorial-knowledge",
"display_name": "<human-readable name>",
"colors": {
"primary": "#RRGGBB",
"accent": "#RRGGBB",
"background": "#RRGGBB",
"surface_1": "#RRGGBB",
"surface_2": "#RRGGBB",
"text_primary": "#RRGGBB",
"text_secondary": "#RRGGBB",
"border": "#RRGGBB"
},
"typography": {},
"grid": {},
"spacing": {},
"card_tokens": {},
"table_tokens": {},
"chart_tokens": {},
"diagram_tokens": {},
"image_tokens": {},
"footer_tokens": {},
"density_limits": {}
}
Validate with:
python3 scripts/validate_contracts.py --style .ppt-work/contracts/style-contract.json --strict
Before build, run Capability Probe and Component Registry resolution. The probe answers what this machine can actually do; the registry answers what each component is, which routes are allowed, which Builder levels are acceptable, what must remain editable, whether raster/SVG/generated output is allowed, and which QA checks are required.
Default registry:
references/component-registry.json
Generate a capability report:
python3 scripts/capability_probe.py \
--style .ppt-work/contracts/style-contract.json \
--registry references/component-registry.json \
--output .ppt-work/capability-report.json \
--strict
Generate a delivery plan:
python3 scripts/resolve_component_delivery.py \
--ppt-ir .ppt-work/contracts/ppt-ir.json \
--style .ppt-work/contracts/style-contract.json \
--registry references/component-registry.json \
--capabilities .ppt-work/capability-report.json \
--profile premium \
--builder auto \
--output .ppt-work/contracts/delivery-plan.json \
--strict
Then validate:
python3 scripts/validate_contracts.py \
--ppt-ir .ppt-work/contracts/ppt-ir.json \
--style .ppt-work/contracts/style-contract.json \
--component-registry references/component-registry.json \
--delivery .ppt-work/contracts/delivery-plan.json \
--strict
Never choose component routes ad hoc during drawing. Ordinary text, cards, tables, matrices, metric cards, and simple charts must remain native/editable. Complex diagrams may fall back to hybrid_overlay or svg_component; conceptual scenes may use generated_image with native title/caption/source overlay. native_required objects must not silently downgrade to SVG or image.
Before selecting a builder:
Forbidden:
unknownFor non-trivial decks, create only the artifacts required by the resolved profile. Internal artifacts go under .ppt-work/; user-facing output goes into the delivery folder.
Profile matrix:
| Artifact | Fast | Standard | Premium |
|---|---|---|---|
| Content Lock | Required | Required | Required |
| Storyboard | Optional | Required | Required |
| PPT IR | Required | Required | Required |
| Style Contract | Required | Required | Required |
| Asset Manifest | If used | Required if used | Required |
| Delivery Plan | Required | Required | Required |
| Build Manifest | Required | Required | Required |
| Full Render | Optional | Representative | Required |
| QA Report | Basic | Required | Required |
| Benchmark Score | No | Optional | Required |
| Verification Report | No | Required | Required |
| Delivery Manifest | Required | Required | Required |
User-facing defaults:
deck.pptx, delivery-manifest.json.deck.pptx, deck-preview.pdf, verification-report.md, delivery-manifest.json.assets/ and source-package/ only when intended for the recipient.Use templates/ppt-production-artifact-checklist.md to confirm completeness.
Before implementing a serious deck, load the references that match the deck's risk and style needs:
references/master-presentation-design-language.md: overall design hierarchy and hybrid-editable principles.references/expression-mode-gate.md: mandatory when creating storyboard or slide manifest.references/premium-page-archetypes.md: mandatory when selecting page archetypes.references/five-style-master-systems.md: mandatory when choosing a style system. This file is now the source of truth for palette hex values; do not derive colors elsewhere.references/spec-to-deck-visual-priority-gate.md: mandatory when a detailed spec, coordinates, or placeholder map is provided.references/component-craft-checklist.md: mandatory before scoring or handoff.references/component-registry.md: mandatory before building; explains Component Registry and Delivery Plan routing.references/builder-adapters.md: mandatory before selecting a builder; explains capability reports, support levels, and adapter contracts.references/diagram-ir-and-layout.md: mandatory for relationship_visual; explains Diagram IR semantics, layout choice, complexity analysis, and delivery guidance.references/diagram-auto-repair.md: read when Diagram IR validation reports broken paths, unknown nodes, connector web risk, or type mismatch.references/master-ppt-design-rubric.md: mandatory for formal decks and final QA.references/component-raster-fallback.md: mandatory when using raster/SVG/generated visual components.references/production-profiles.md: mandatory before artifact planning or packaging.references/production-readiness-gates.md: mandatory for non-trivial decks.references/anti-regression-examples.md: read when quality regresses into bullets, connector webs, literal spec execution, or raster overuse.references/benchmark-methodology.md: read when running formal rubric scoring, comparing tool/prompt changes, or adding regression fixtures.Templates:
templates/slide-manifest-template.jsontemplates/style-contract-example.jsontemplates/component-registry-example.jsontemplates/capability-report-example.jsontemplates/delivery-plan-example.jsontemplates/delivery-manifest-example.jsontemplates/diagram-ir-example.jsontemplates/design-language-schema.json (deprecated pointer only)templates/spec-implementation-priority-schema.jsontemplates/visual-qa-gate-template.jsontemplates/content-lock-template.mdtemplates/storyboard-template.mdtemplates/benchmark-case-example.jsontemplates/rubric-score-example.jsonMove in this order: content semantics -> expression mode -> Diagram IR for relationship visuals -> page architecture -> visual priority/deletion -> visual grammar -> delivery implementation -> verification and scoring.
Pass only when:
Fail if the title could fit any generic deck, bullets are copied without prioritization, evidence and conclusion disconnect, or the slide would misrepresent the source.
Run this before finalizing slide_manifest.json.
Every slide must choose exactly one expression_mode:
textual_argument: answer-first title plus short support.structured_cards: parallel ideas or grouped examples.table_matrix: precise comparison, scoring, checklist, or coverage lookup.data_visual: magnitude, trend, ranking, contrast, distribution, or composition.relationship_visual: architecture, ecosystem, flow, causal chain, dependency, flywheel, stakeholder map, ownership boundary, trust boundary, or operating model.conceptual_scene: editorial illustration, IP/persona scene, metaphor, or abstract visual hook.hybrid_panel: one primary visual component plus concise interpretation.Classify as relationship_visual when the source contains one strong trigger or two medium triggers from references/expression-mode-gate.md.
Pass only when every slide records:
expression_modeexpression_mode_reasonaudience_questionprimary_anchorvisual_component_plan when the mode is relationship_visual, conceptual_scene, or visual-heavy hybrid_panelvisual_component_delivery when the bounded component may be native_ppt, svg_html_render, generated_image, or hybrid_generated_componentFail if relationship, flow, system boundary, feedback loop, ecosystem, causal chain, or spatial metaphor content remains pure prose or generic cards without deliberate simplification.
Pass only when:
Fail if two diagrams compete, a slide tries to explain workflow/metrics/risks at once, or layout is chosen before message.
Use whenever the user provides a detailed design spec, coordinates, placeholder map, brand template, or page-by-page layout description.
A design spec is not a command to draw every listed object at full strength. Treat it as design intent plus candidate inventory.
Before PPT implementation, create spec_implementation_plan.json with:
Fail if detailed coordinates are executed literally, background or technical decoration competes with content, or connector webs appear.
Use when the user expects polish, formal quality, style exploration, template creation, or public/client-facing delivery.
Pass only when:
Fail if a final deck is built without seeing visual direction for a polish-sensitive request.
Pass only when:
style-contract.json exactly (no invented hex, type sizes, spacing, radius, table, chart, diagram, image, or footer values)Fail if the deck is screenshot-only without explicit user acceptance, text clips, media is missing, or final report overclaims editability.
Use style systems as complete design languages, not skins. Every style is now bound to a strict Style Contract fixture — see tests/fixtures/styles/ and references/five-style-master-systems.md. The skill is no longer compatible with style descriptions that only encode mood; a model that invents its own colors or component parameters will produce off-contract output and fail the Style Contract Gate.
Default options (5 styles):
consulting-light: formal boardroom, evidence-heavy, answer-first. Palettes: mckinsey (default), bcg.product-report: product strategy, metrics, roadmap, tradeoffs. Palettes: linear (default), stripe.technical-blueprint: precise engineering workflow/architecture/runbook. Palette: ibm-whitepaper (default).consulting-blueprint-hybrid: consulting hierarchy with restrained technical accents. Palette: deep-amber (default).editorial-knowledge: premium knowledge deck for longform ideas. Palette: warm-paper (default).For Agent systems, automation workflows, architecture, toolchains, permissions, failure modes, observability, OpenClaw/Codex workflows, or engineering strategy decks, prefer consulting-blueprint-hybrid unless the audience is purely implementation-focused.
For a reusable v2 production starting point, select one validated pack before mapping slides:
references/template-packs/editorial-knowledge.json: longform explainers, newsletters, courses, personal IP, and knowledge products.references/template-packs/technical-blueprint.json: implementation-focused architecture, workflow, runbook, and engineering evidence decks.Validate packs against schemas/template-pack.schema.json. Each pack binds a v2 Style Contract to exactly six production roles (cover, judgment, evidence/data, process/relationship, comparison/implementation, and closing), current primary_expression modes, named Component Registry types, allowed delivery routes, editable-core policy, forbidden patterns, and truthful delivery constraints.
A template pack is not a screenshot library or dead master deck. It is reusable Style Contract plus archetype/component-routing policy. Resolve its component policies through references/component-registry.json and the normal Delivery Plan gate; do not treat a preferred route as proof that the active builder supports it. Keep message-bearing titles, arguments, data, labels, tables, diagrams, source notes, and actions editable as declared. Any bounded SVG, raster, background, or generated component must preserve the required native overlay and be disclosed. Pack selection does not waive render/readback/QA requirements or justify a Premium final claim without evidence.
Technical blueprint style must not become raw blueprint/wireframe. For client-facing or high-stakes technical decks:
Default technical noise budgets:
If a technical slide exceeds budget, group, split, move details to appendix/notes, or choose SVG/HTML/generated bounded component.
Use HTML/CSS, code-rendered references, screenshots, or contact sheets to calibrate typography, material/background systems, layout rhythm, component style, and density.
This lane may use browser-level craft, but do not pretend the screenshot is editable PPT.
Build final PPTX from structured manifest or generation code.
Keep editable as native PPT objects:
Allow raster/SVG/generated layers for material backgrounds, photos, illustrations, IP character art, complex relationship maps, conceptual scenes, ecosystem maps, dense architecture murals, or soft-boundary components.
Use references/component-raster-fallback.md whenever considering raster/SVG/generated components.
For relationship_visual, conceptual_scene, and visual-heavy hybrid_panel, bounded visual components are a planned delivery strategy, not merely late-stage rescue.
Good candidates:
Poor candidates:
When using raster/SVG/generated components:
verification-report.mdWhen primary_expression=relationship_visual:
Do not:
Use references/master-ppt-design-rubric.md. A production slide must score at least 14/18, with no zero.
Six dimensions:
Revise before final handoff if any are true:
style-contract.jsonBefore final handoff:
python3 scripts/verify_deck.py deck.pptx --ppt-ir .ppt-work/contracts/ppt-ir.json --style .ppt-work/contracts/style-contract.json --delivery .ppt-work/contracts/delivery-plan.json --build .ppt-work/contracts/build-manifest.json --render --output .ppt-work/qa/qa-report.jsonRENDER_ENGINE_UNAVAILABLE, return/carry the unavailable status, and cap final status honestly. Do not create fake screenshots or claim visual QA passed.style-contract.json exactly. Drift from the contract is a defect, not a creative choice.python3 scripts/repair_deck.py deck.pptx --qa-report .ppt-work/qa/qa-report.json --output-pptx .ppt-work/qa/repaired.pptx --output-report .ppt-work/qa/repair-report.json. Only safe deterministic repairs may be attempted; never mark visual/render issues repaired without a real render recheck.scripts/package_delivery.py; validate delivery-manifest.json and keep .ppt-work/ if packaging fails.Final status must distinguish planned, created, rendered, read_back, verified, final, and failed. The status is calculated from Build Manifest, QA Report, and benchmark evidence. Builders and agents must not handwrite final; Premium without real render evidence is not final.
Local PPTX export is the safer default for sensitive drafts, PRDs, internal metrics, automation designs, and unpublished content. Only upload/share to Feishu/Lark Slides when the user explicitly requests cloud delivery and the content is appropriate.
Keep this main workflow as routing only. Use references for detailed gates:
production-profiles.md, expression-mode-gate.md, design-token-contract.md,
component-registry.md, diagram-ir-and-layout.md, builder-adapters.md,
verification-harness.md, and production-readiness-gates.md.
consulting-blueprint-hybrid: consulting structure with technical proof components, not raw blueprint drafting.Use style systems as complete design languages, not skins. Every style in this file is bound to one or more named palette contracts with exact hex values. The build must read colors from style_contract.json; do not invent hex values at build time. If a style needs a new palette, add it to this file first, then update style_contract.json to reference it.
Global color usage rules (apply to every palette):
primary: title bars, main color blocks, key structural elements, top-of-page header strips, large callout blocks.accent: data highlights, single-emphasis callouts, key numbers, focused labels. Never use accent as a large fill or as a page background.background: page base. The whole slide sits on this color.neutrals (3 grays): body text, secondary text, dividers, borders, subtle fills, table strokes. Choose values that harmonize with the palette.Boardroom, evidence-heavy, answer-first, decision-oriented. Use for formal reports, executive updates, market analysis, investor-style briefs, and McKinsey-like decks. White space, strong titles, restrained color, and clean proof components matter more than visual novelty.
Available palettes:
mckinsey (default)| Token | Hex | Use |
|---|---|---|
| primary | #051C2C | deep navy titles, header bars, primary structural blocks |
| accent | #2251FF | single-emphasis data highlights, key callouts |
| background | #FFFFFF | page base |
| neutral-900 (text) | #1F2937 | body text, judgment titles |
| neutral-500 (muted) | #6B7280 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E5E7EB | dividers, table strokes, subtle card fills |
bcg| Token | Hex | Use |
|---|---|---|
| primary | #004C2F | deep green titles, header bars, primary structural blocks |
| accent | #00823B | single-emphasis data highlights, key callouts |
| background | #F9F9F9 | page base |
| neutral-900 (text) | #1F2937 | body text, judgment titles |
| neutral-500 (muted) | #6B7280 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E5E7EB | dividers, table strokes, subtle card fills |
Modern product strategy deck with metrics, roadmap, tradeoffs, operating decisions, and user/business evidence. Use for PRDs, MVP plans, retrospectives, roadmap proposals, and launch reviews.
Available palettes:
linear (default)| Token | Hex | Use |
|---|---|---|
| primary | #1A1A2E | near-black titles, header bars, primary structural blocks |
| accent | #7B68EE | medium-violet single-emphasis data highlights, key callouts |
| background | #F7F7FB | cool off-white page base |
| neutral-900 (text) | #1F2937 | body text, judgment titles |
| neutral-500 (muted) | #6B7280 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E5E7EB | dividers, table strokes, subtle card fills |
stripe| Token | Hex | Use |
|---|---|---|
| primary | #0F0F0F | near-black titles, header bars, primary structural blocks |
| accent | #0055FF | bright blue single-emphasis data highlights, key callouts |
| background | #FAFAFA | page base |
| neutral-900 (text) | #1A1A1A | body text, judgment titles |
| neutral-500 (muted) | #6B6E73 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E6E6E9 | dividers, table strokes, subtle card fills |
Precise executable engineering deck with lanes, nodes, boundaries, failure modes, observability, and runbooks. Use when implementation detail is the audience's main need. Keep diagrams disciplined and avoid raw tool-screenshot aesthetics. Light-mode, formal technical whitepaper / RFC feel, print-friendly.
Available palettes:
ibm-whitepaper (default)| Token | Hex | Use |
|---|---|---|
| primary | #005A9E | IBM blue titles, header bars, primary structural blocks, node outlines |
| accent | #005A9E | single-emphasis highlights (same as primary; rely on weight and isolation rather than a second hue) |
| background | #FAFAFA | page base |
| secondary-surface | #F0F4F8 | panel / code-block / table-header fills |
| neutral-900 (text) | #1F2937 | body text, judgment titles |
| neutral-500 (muted) | #4B5563 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #D1D5DB | dividers, table strokes, subtle card fills |
When accent and primary are identical, use neutral-700 #374151 as the de-facto "second accent" for a second tier of emphasis (e.g. secondary nodes) so the deck does not collapse to monochrome.
Formal consulting hierarchy with restrained technical blueprint accents. Use for Agent systems, automation workflows, architecture strategy, platform operating models, and technical decks for business audiences. The slide should feel like consulting output first and engineering blueprint second. Consulting-first, restrained amber-gold technical accent.
Available palettes:
deep-amber (default)| Token | Hex | Use |
|---|---|---|
| primary | #1B2A4A | deep navy titles, header bars, primary structural blocks |
| accent | #E8A838 | restrained amber-gold single-emphasis highlights, key callouts |
| background | #F9FAFB | page base |
| neutral-900 (text) | #2D3748 | body text, judgment titles (slightly differentiated from primary navy) |
| neutral-500 (muted) | #4A5568 | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E2E8F0 | dividers, table strokes, subtle card fills |
Use accent #E8A838 sparingly: it is a highlight, not a fill. A small accent block, an underline beneath a number, or a single labeled arrow is enough.
Premium knowledge deck that turns longform writing into frameworks, contrasts, steps, mistakes, examples, and memorable ideas. Use for explainers, newsletters, courses, personal IP, and knowledge products. Paper texture, knowledge-blogger feel.
Available palettes:
warm-paper (default)| Token | Hex | Use |
|---|---|---|
| primary | #2D2926 | warm dark titles, header bars, primary structural blocks |
| accent | #E8633A | warm orange-red single-emphasis highlights, key callouts |
| background | #FAF7F2 | warm paper page base |
| neutral-900 (text) | #4A4540 | body text, judgment titles (warm dark, harmonized with primary) |
| neutral-500 (muted) | #7A736D | secondary text, source notes, captions |
| neutral-200 (border/fill) | #E5E0D8 | dividers, table strokes, subtle card fills (warm beige) |
{
"style_system": "consulting-light|product-report|technical-blueprint|consulting-blueprint-hybrid|editorial-knowledge",
"palette_name": "string (must match a named palette under the chosen style_system)",
"audience": "",
"formality": "draft|internal|executive|client|public",
"colors": {
"primary": "#RRGGBB (required, must match palette)",
"accent": "#RRGGBB (required, must match palette)",
"background": "#RRGGBB (required, must match palette)",
"secondary_surface": "#RRGGBB (optional, required for technical-blueprint)",
"neutrals": ["#RRGGBB", "#RRGGBB", "#RRGGBB"]
},
"usage_rules": {
"primary": "title bars, main color blocks, key structural elements",
"accent": "data highlights, single-emphasis callouts, never as large fill",
"background": "page base",
"neutrals": "body text, dividers, secondary fills"
},
"typography": {
"title_role": "judgment title",
"body_role": "evidence or interpretation",
"minimum_body_size_pt": 10
},
"layout": {
"grid": "",
"spacing_rules": [],
"density_limits": []
},
"components": {
"cards": "",
"tables": "",
"charts": "",
"relationship_diagrams": "",
"raster_layers": ""
},
"forbidden_drift": []
}
{
"deck": {
"source": "",
"source_rights": "owned|licensed|external-reference|unknown",
"usage_boundary": "private draft|internal review|public sharing|client delivery|training|publication",
"export_target": "pptx|native-dynamic-pptx|html-preview|dynamic-html|feishu-slides|multi",
"audience": "",
"visual_system": "consulting-light|product-report|technical-blueprint|consulting-blueprint-hybrid|editorial-knowledge",
"palette_name": "string (must match a named palette under visual_system)",
"logical_slide_count": 0,
"physical_slide_count": 0,
"content_lock": "content_analysis.md",
"storyboard": "storyboard.md",
"style_contract": "style_contract.json",
"verification_report": "verification-report.md"
},
"slides": [
{
"logical_slide_id": "S01",
"title": "",
"judgment_title": "",
"content_lock_ref": "content_analysis.md#slide-1",
"physical_slide_ids": ["pptx-slide-1"],
"page_archetype": "claim-evidence|metric-proof|framework-map|process-lane|system-architecture|ecosystem-map|decision-matrix|risk-register|observability-dashboard|comparison-contrast|editorial-scene|closing-standard",
"density_label": "low|medium|high",
"primary_anchor": "",
"audience_question": "",
"expression_mode": "textual_argument|structured_cards|table_matrix|relationship_visual|conceptual_scene|data_visual|hybrid_panel",
"expression_mode_reason": "",
"relationship_types": [],
"visual_component_plan": {
"component_type": "none|ecosystem map|dependency graph|layered architecture|swimlane|flywheel|causal chain|stakeholder network|capability landscape|conceptual scene|chart",
"audience_question": "",
"primary_entities": [],
"relationship_types": [],
"simplification_strategy": "grouping|lanes|layers|split slide|appendix|label reduction|not needed",
"editable_core": [],
"visual_component_delivery": "native_ppt|svg_html_render|generated_image|hybrid_generated_component|none",
"raster_acceptance_reason": ""
},
"editable_text_objects": [],
"must_keep_editable_text": [],
"visual_objects": [],
"images": [],
"charts": [],
"tables": [],
"asset_provenance": [],
"source_labels": [],
"rasterization_tradeoff": "none|bounded_component|material_layer|full_slide_approved",
"score": {
"judgment_quality": "unknown",
"content_fidelity": "unknown",
"expression_architecture": "unknown",
"page_composition": "unknown",
"component_craft": "unknown",
"editability_hygiene": "unknown",
"total": "unknown"
},
"verification": {
"nonblank_render": "unknown",
"text_overflow": "unknown",
"editable_core_text": "unknown",
"visual_structure_preserved": "unknown",
"source_labels_present": "unknown",
"raster_component_disclosed": "unknown"
}
}
]
}