name: humanize-ppt description: Render-QA inspector for agent-made PPTs, plus AST-based outline director and per-page media decision maker. Produces production briefs for native downstream PPT skills (broadly compatible with any skill that outputs HTML PPT; verified recommendations are guizang-ppt-skill for Chinese and frontend-slides / beautiful-html-templates for English), then runs the capped 3-round presentation checkup (演讲体检) on the rendered HTML, comparing each page against its outline page and writing fix prompts. Use before generating PPT/HTML slides from raw material, and after rendering when the user says things like "帮我盯一下渲染出来的 PPT 有没有翻车", "PPT 渲染质检", "给这份 deck 做演讲体检", or "告诉我哪几页只能看不能讲". Pick by need - if all you want is one beautiful template page, with no outline and no presentation checkup, a rendering skill alone is the right tool; bring in Humanize when you need the outline before rendering and the checkup after. Humanize never renders. version: 0.8.0 author: LearnPrompt license: MIT requires-skills: guizang-ppt-skill: "Required when the deck language is Chinese. The brief writer references ~/.agents/skills/guizang-ppt-skill/SKILL.md; without it the next agent cannot render. v0.6.5 brief writer emits a stderr warning if the skill is not detected." frontend-slides: "Recommended when the deck language is English. Same hand-off pattern as guizang. v0.8.0 support_level: brief-only — the brief exit works; the presentation-checkup leg (--qa-from) has not yet run on its real rendered output." beautiful-html-templates: "English alternative. Same hand-off pattern. v0.8.0 support_level: brief+qa-verified — brief exit works, and a full presentation checkup ran on a real Neo-Grid deck on 2026-06-13 (docs/showcase/hermes-agent-mastery/en/)." metadata: tags: [presentation, ppt, html-slides, humanizer, ast, workflow, brief-orchestrator, hv-analysis, 9-styles]
Humanize PPT
Use this skill when a user wants to turn raw material, notes, voice transcripts, documents, links, or old PPTs into a presentation-ready outline and per-page media decisions before delegating rendering to a downstream skill.
Positioning
Humanize PPT is a Render-QA Inspector: an Outline Director, Per-Page Media Director, Production Brief Orchestrator, and Presentation Checkup Runner (演讲体检; formerly called the QA loop, the CLI flag is still --qa-from) — not a slide renderer. Downstream template skills own "renders beautifully"; Humanize owns "someone checked what actually rendered".
The presentation checkup in one sentence: it does not grade beauty, it grades the outline. It compares every rendered page against its outline page, pulls out the pages that can only be looked at but not spoken from, and keeps going until every page is one the speaker can stand up and present. A failed page, in plain words: a page that holds only a few words and never finishes its point, or a page that fails the audience state transfer it promised (the listener walks out of that page in the same state they walked in). Such a page should not exist; the checkup pulls it out and generates fix instructions.
Humanize is broadly compatible with any downstream skill that can output an HTML PPT: the brief is plain markdown + JSON, anything can read it. The verified, stable recommendations are: Chinese → guizang-ppt-skill; English → frontend-slides / beautiful-html-templates. Other downstreams are hot-pluggable; support levels live in registry/renderer_registry.json and are updated only on real results.
It runs before downstream PPT / HTML slide skills and around the post-render presentation checkup. It owns the AST contract, the per-page media decision (does this page need a photo, a system diagram, a 10-second process clip, nothing?), the production brief that the next agent consumes, and the checkup pass on the rendered HTML. It does not own the rendered HTML itself.
V0.6.4 is the single entrypoint for this loop. The user calls Humanize PPT once for the brief, hands the brief to a downstream skill for native rendering, then calls Humanize PPT again with --qa-from <rendered.html> to run the 3-iteration presentation checkup. Each iteration writes qa_report.md (findings), fix_prompt.md (downstream-skill-actionable corrections), and qa_iteration.json (round state). After 3 rounds with remaining findings, status flips to needs-human.
Humanize PPT never copies a downstream skill's template, never injects custom sections into it, and never post-processes the rendered HTML. When the downstream skill updates, Humanize PPT needs zero changes. This is the contract — see references/guizang-production-brief-orchestrator.md for the full brief specification.
For public positioning, describe Humanize PPT as a brief orchestrator that pairs with native downstream renderers. Do not frame it as a renderer itself, and do not present it as a "router" that picks the best visual style for the user — that decision lives in the brief, the downstream skill's own templates, and the human's review. When a user only wants a pretty template page, that is a rendering-skill job, not a Humanize job: state the choice, not a prohibition.
AST theory
AST means Audience-State-Transfer.
- Audience: who is listening, what they know, what they resist, and why they would keep listening.
- State: the audience state before and after the deck, plus the core tension that blocks the transition.
- Transfer: the slide-by-slide path that moves the audience from initial state to desired state.
Core sentence:
PPT is not an information container. PPT is an audience state-transfer artifact.
Required output contract
For every Humanize PPT run, produce:
deck_brief.md— audience, goal, tension, success criteria.ast_outline.md— AST map and narrative arc.slide_plan.json— slide-by-slide plan, with per-pagemedia: {image, diagram, video}decision andlayout_hint.speaker_intent.md— what the speaker should do on each slide. Downstream skills consume this as the source for their native speaker notes and presenter shell.asset_manifest.md— Humanize's per-page material decisions: which page needs which kind of asset (image / diagram / video) and for what purpose.video_slots.json— optional Remotion / HyperFrames / native video insertion plan.style_brief.md— visual principle for downstream production.renderer_registry.json— renderer capability snapshot for this run.router_plan.json— selected primary renderer and staged route plan.commands/*.md— bounded instructions for each downstream specialist agent.run_manifest.json— final file inventory, route status, and QA status.<renderer>-production-prompt.md— the production brief that the next agent consumes. v0.6.4 emitsguizang-production-prompt.md,frontend-slides-production-prompt.md, orbeautiful-html-templates-production-prompt.mddepending on language and route. This file references the downstream skill's ownSKILL.mdand is the only thing the next agent needs to read.outputs/qa/qa_report.md— first-pass QA gate (brief mode) or per-iteration QA findings (QA mode).
QA mode (post-render) additionally produces per iteration:
outputs/qa/fix_prompt.md— downstream-skill-actionable fix instructions.outputs/qa/qa_iteration.json— round number, status (iterate/pass/needs-human), unresolved findings, history.
Recommended OPC workflow (v0.6.4)
O — Outline + Per-Page Media Direction
Humanize PPT: raw material → AST outline + per-page media decision
(deck_brief.md, ast_outline.md, slide_plan.json, speaker_intent.md,
asset_manifest.md, video_slots.json, style_brief.md)
P — Native Renderer Invocation (100% downstream)
zh → guizang-ppt-skill (Style A or B, native; recommended)
en → frontend-slides / beautiful-html-templates (native; recommended)
other HTML-PPT skills → hot-pluggable, same brief contract
Humanize emits the production prompt and stops. The downstream
skill renders the deck. Humanize does NOT copy templates, does
NOT inject SLIDES_HERE / [必填] replacements, does NOT add
postMessage bridges to the rendered HTML.
Q — Presentation Checkup (演讲体检) on the rendered HTML
Humanize --qa-from <rendered.html> reads the output of P,
compares pages against the outline, scans for failure modes
(references/qa-failure-modes.md), writes qa_report.md and
fix_prompt.md, tracks iteration in qa_iteration.json.
Cap: 3 rounds. After cap with remaining findings, status
flips to needs-human.
C — Complete / Control
Downstream skill native speaker notes + presenter shell + deploy
(Humanize does not own these in v0.6.4 — the brief tells the
next agent to produce them in the downstream skill's own format)
Rules
v0.6.4 invariants (these are the hard rules; if you break any, you're off the v0.6.4 boundary)
- Humanize is brief-only. It writes
<renderer>-production-prompt.mdand stops. It does not open, copy, or post-process the downstream skill's template. When the downstream skill updates its template, animation markers, or validator, Humanize needs zero changes. - Downstream renderers are 100% native. The next agent follows the downstream skill's own
SKILL.md. The brief tells the next agent which skill to load, which Style (A/B) to use, which layouts to pick from, and which QA gates must pass — but it does not carry template internals. - The presentation checkup caps at 3 iterations. Round 4 with remaining fail findings is
needs-human. The loop does not spin forever; it hands the decision back to a human. - Speaker notes and presenter shell are downstream-skill-owned. Humanize owns the semantic source (
speaker_intent.md). The downstream skill produces the native speaker notes and presenter shell. Humanize does not injectpostMessagebridges or?slide=URL parameters into the rendered HTML. - The brief is the only thing the next agent reads. It is a complete contract: deck metadata, per-page media decisions, style files, hard rules, known-good checkpoint, and per-style QA gates. The next agent does not need to re-derive intent from raw source material.
Working rules
- Do not let slide renderers consume raw material directly when Humanize PPT can first produce the AST contract.
- Keep presenter mode as a downstream-skill completion step, not a Humanize style.
- Absorb AI-writing cleanup principles from humanizer tools, but do not reduce Humanize PPT to text polishing.
- Prefer a small verified workflow over a broad unverified promise.
- For public Skill releases, create/push the repo, install from GitHub locally, run one safe full sample, verify the brief + presentation checkup on the verified known-good checkpoint (
examples/03-codex-guizang-native-ink-classic/), and only then polish README details. - For Agent Teams development, emit
router_plan.json,run_manifest.json, boundedcommands/*.md, and the per-renderer production prompt before wiring real downstream Skills. - For WorkBuddy/CodeBuddy team upload packages, do not package demo or rendered HTML outputs as the team zip. The upload zip must mirror a team-plugin structure like
trading-team: root-level.codebuddy-plugin/plugin.json,agents/,skills/,rules/, andsetting.json(plus optionalavatars/,.workbuddy-plugin/,README.md,settings.json). Therules/directory should include a scenario rule file such asrules/<plugin-name>_rules.mdwith frontmatter (description,alwaysApply,enabled,updatedAt,provider) and a<system_reminder>block describing available agents, skills, SOP, and usage requirements. Verify withunzip -lthat the root is notindex.html/assets/screenshots/sourceand is not folder-wrapped unless the target uploader explicitly requires a wrapper directory. - Do not treat HyperFrames/Remotion videos as a single embedded player that replaces PPT content. For Humanize PPT deliverables, video tools are material producers: transitions, explainer clips, before/after comparisons, talking-material inserts, social previews, and fallback stills that fill specific slide needs. The
media.videodecision per page (seeslide_plan.jsonschema) tells the downstream skill which pages want a Remotion clip, for what purpose, and at what duration.
Renderer-specific guidance (kept for history; the boundary itself is the invariants above)
- For Chinese PPT production, the recommended stable path is
Humanize PPT → guizang-ppt-skill native → Humanize --qa-from → downstream presenter/deploy. Guizang's own material QA and Swiss validator run inside the downstream skill. The presentation checkup in Humanize is a second-pair-of-eyes pass, not a replacement. - For English PPT production, the recommended path is
Humanize PPT → frontend-slides or beautiful-html-templates (native) → Humanize --qa-from → downstream deploy. The downstream skill owns its own template selection, preview gallery, and selected-template full deck. Humanize does not imitate them. v0.8.0 support levels (seeregistry/renderer_registry.json):beautiful-html-templatesisbrief+qa-verified— a full presentation checkup ran on its real Neo-Grid deck on 2026-06-13 (round log:docs/showcase/hermes-agent-mastery/en/qa/presentation-checkup-2026-06-13.md), though it still has 0 renderer-specific failure-mode rules;frontend-slidesstaysbrief-onlybecause no real frontend-slides render has gone through the checkup yet. State this honestly when a user asks for English-deck checkup; do not overstate either leg. - The verified Style A checkpoint at
examples/03-codex-guizang-native-ink-classic/is a read-only visual reference. If the presentation checkup ever fails against it (test_known_good_style_a_passes_all_style_a_gates), the fixture or the live Guizang skill has drifted — do not weaken the checkup to make the test pass. The same applies to the English checked-up deck atdocs/showcase/hermes-agent-mastery/en/ppt/(test_english_showcase_deck_passes_presentation_checkup).
Operational references
references/guizang-production-brief-orchestrator.md— v0.6.4 canonical brief specification. The human + agent-facing contract for what<renderer>-production-prompt.mdmust contain and what it must not contain.references/qa-failure-modes.md— failure mode catalog for the presentation checkup (演讲体检): a renderer-agnostic failure-class layer plus guizang-specific modes, each with what the audience would see. Human-readable; the code-side source of truth isFAILURE_MODESinscripts/humanize_ppt_v2.py.scripts/preview_outline_html.py— outline preview: renders the audience state-transfer map (one zero-dependency single-file HTML; per-slide enter-state → intent → leave-state rows plus a state-arc summary) fromslide_plan.json. Real sample:examples/04-preview-outline-ai-tool-update/.docs/versions/v0.8.0-presentation-checkup.md— v0.8.0 release notes: why the QA loop was renamed to presentation checkup, the hot-pluggable route framing, the plain-language usage rewrite, and the verified English checkup run.docs/versions/v0.7.0-render-qa-inspector.md— v0.7.0 release notes: why the positioning moved to render-QA inspector, English-path support levels, and the outline preview artifact.references/agent-teams-public-preview.md— Agent Teams architecture, specialist-agent command protocol, public preview release loop, and README split convention. (Historical; v0.6.4 collapses the Agent Teams model into a brief + QA loop.)references/humanize-ppt-public-writing.md— Public-facing positioning and article/script patterns: Humanize PPT as brief orchestrator, not a fixed 4-Skill bundle.references/workbuddy-team-packaging-and-video-materials.md— WorkBuddy/CodeBuddy team upload zip structure, validation script, scenario rules shape, and the Remotion/HyperFrames-as-material-producers pitfall.references/guizang-material-qa.md— Guizang downstream workflow, material production rules, Swiss visual QA checklist, and failure patterns learned from a full Humanize PPT → guizang deck pass. Caveat: these rules apply to the rendered HTML, not to the Humanize brief.references/guizang-presenter-deploy.md— Default Chinese PPT production path: guizang stable deck, material QA, presenter shell, and static deploy checks. Caveat: these rules apply to the rendered HTML, not to the Humanize brief.references/beautiful-preview-first-adapter.md— Durable adapter pattern for connectingbeautiful-html-templates: version boundary, template selection, real title-slide previews, manifests, QA, and pitfalls. (Historical; v0.6.4 hands template selection to the downstream skill.)references/selected-template-full-deck-adapter.md— Durable adapter pattern for V0.4 selected-template full deck generation: required artifacts, routing, QA, and TDD coverage. (Historical.)references/presenter-export-adapter.md— Durable adapter pattern for adding V0.5-style presenter shell and export package after a final deck exists. (Historical; v0.6.4 hands presenter/export to the downstream skill.)docs/versions/v0.6.4-guizang-production-brief-orchestrator.md— v0.6.4 release notes: what changed, lessons, boundaries, known-good checkpoint, QA loop cap.docs/versions/v0.2-router-edition.mdthroughv0.6.3-english-style-gallery.md— historical version notes, kept for context.docs/versions/v0.4-selected-template-full-deck.md— V0.4 Selected Template Full Deck notes:--selected-template, selected deck output, manifests, QA, and current boundaries.docs/versions/v0.5-presenter-export-adapter.md— V0.5 Presenter / Export Adapter notes:--presenter-adapter,--export-adapter, output artifacts, and boundaries.docs/versions/v0.6.1-guizang-material-qa.md— V0.6.1 Guizang material QA notes: downstream artifact recording, Remotion-as-material, SVG-safe Chinese diagrams, and visual review rules.docs/versions/v0.6.2-guizang-presenter-deploy.md— V0.6.2 Guizang presenter deploy notes: Chinese default path,postMessagepresenter shell, and public static showcase.docs/versions/v0.6.3-english-style-gallery.md— V0.6.3 English style gallery notes: theme-first gate, five visible style candidates, and selected-style continuation.docs/smoke-test.md— No-dependency smoke check for validating the stable entrypoint on machines without pytest.docs/plans/2026-05-25-release-readiness-checklist.md— V0.6 release-readiness checklist and release-note draft.
Local demo
The recommended stable entrypoint is scripts/humanize_ppt.py. Versioned scripts remain available for compatibility.
Brief mode (v0.6.4 default — writes a Guizang production brief, no HTML):
python3 scripts/humanize_ppt.py \
--source examples/01-ai-tool-update/source.md \
--out .humanize-ppt-runs/ai-tool-update-v0.6.4 \
--title "AI 工具更新,不只是功能清单" \
--renderer guizang \
--guizang-style A
The next agent reads guizang-production-prompt.md and renders natively via guizang-ppt-skill. Once the deck is rendered, run the presentation checkup:
python3 scripts/humanize_ppt.py \
--qa-from .humanize-ppt-runs/ai-tool-update-v0.6.4/rendered/index.html \
--out .humanize-ppt-runs/ai-tool-update-v0.6.4 \
--renderer guizang \
--guizang-style A \
--max-qa-iterations 3
English paths use the same shape with --renderer beautiful-html-templates or --renderer frontend-slides, which write beautiful-html-templates-production-prompt.md or frontend-slides-production-prompt.md respectively. (v0.8.0: beautiful-html-templates is support_level: brief+qa-verified after the 2026-06-13 real-deck checkup; frontend-slides remains brief-only until a real render of it goes through the checkup.)
Outline preview (audience state-transfer map from an existing slide_plan.json, zero-dependency single-file HTML):
python3 scripts/preview_outline_html.py \
--slide-plan .humanize-ppt-runs/ai-tool-update-v0.6.4/slide_plan.json \
--out .humanize-ppt-runs/ai-tool-update-v0.6.4/preview-outline.html \
--title "AI 工具更新,不只是功能清单"
The legacy V0.2-compatible entrypoint remains available for compatibility with earlier agents:
python3 scripts/humanize_ppt_v2.py \
--source examples/01-ai-tool-update/source.md \
--out .humanize-ppt-runs/ai-tool-update-v0.2 \
--title "AI 工具更新,不只是功能清单" \
--renderer auto
Legacy V0.1 demo remains available:
python3 scripts/humanize_ppt_v1.py \
--source examples/01-ai-tool-update/source.md \
--out .humanize-ppt-runs/ai-tool-update \
--title "AI 工具更新,不只是功能清单"