Skip to main content

gbb-pptx

Plan, review and generate content-first PowerPoint (PPTX) presentations. Build audience-specific arguments, evidence-backed messages and storyboards before rendering with python-pptx; preserve approved content and existing themes. Confirm audience and deck structure; optionally iterate visuals in a browser with an explicit PowerPoint editability contract and early export proof. USE FOR: create PowerPoint, generate PPTX, make slide deck, build presentation, convert markdown to slides, pitch deck, report as PPTX, create slides, gbb-pptx, gbb deck, dark-themed deck, slide content, presentation storyline, presentation content audit, executive briefing, technical presentation, training slides, evidence review, speaker notes, slide storyboard. DO NOT USE FOR: direct editing of existing PPTX files (use `pptx` for file operations; use this skill for editorial review), PDF generation, Google Slides.

来源信息

仓库
aiappsgbb/awesome-gbb
最近来源活动
2026年9月29日 09:15
检测到的 SKILL.md 语言
英语
星标
6
分支
3

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
9 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
gbb-pptx
description
Plan, review and generate content-first PowerPoint (PPTX) presentations. Build audience-specific arguments, evidence-backed messages and storyboards before rendering with python-pptx; preserve approved content and existing themes. Confirm audience and deck structure; optionally iterate visuals in a browser with an explicit PowerPoint editability contract and early export proof. USE FOR: create PowerPoint, generate PPTX, make slide deck, build presentation, convert markdown to slides, pitch deck, report as PPTX, create slides, gbb-pptx, gbb deck, dark-themed deck, slide content, presentation storyline, presentation content audit, executive briefing, technical presentation, training slides, evidence review, speaker notes, slide storyboard. DO NOT USE FOR: direct editing of existing PPTX files (use `pptx` for file operations; use this skill for editorial review), PDF generation, Google Slides.
metadata
{"version":"2.2.0"}
# GBB PPTX Deck Generator Skill > **Renamed from `pptx` in v2.0.0** to avoid name collision with the upstream > Anthropic-style `pptx` skill (which also creates presentations and supports > reading/editing existing `.pptx` files). This GBB variant generates fresh > dark/light-themed pitch decks from Markdown using `python-pptx`. Both can > coexist at user scope — invoke this one with the `gbb-pptx` / "GBB deck" / > "dark-themed deck" trigger phrases. Build a presentation worth following before making a PowerPoint worth looking at. Use `python-pptx` as the default generator for new files; retain the dark/light presets and generation patterns below. Browser-first visual iteration is optional, not a promise of lossless HTML-to-PPTX conversion. Content quality is not established by a valid file or attractive slides. ## When to Use Invoke this skill when the user asks to: - Create a PowerPoint / PPTX presentation - Generate a slide deck - Convert markdown content into slides - Build a pitch deck or report as PPTX - Audit slide content, improve a storyline, or revise specific messages - Prepare an executive briefing, technical explanation, training or read-ahead ## Prerequisites Editorial work needs only accessible source material, not a Python installation. For file generation, use an available `python-pptx` environment; install only when missing and permitted by the host: ```bash pip install python-pptx ``` ## How It Works Choose the smallest path that meets the request. Reuse existing decisions; do not repeat discovery or impose a questionnaire. | Request | Path | |---|---| | Audit or plan only | Inspect content and report slide-specific findings; do not rewrite files or render. | | Targeted revision | Preserve unaffected slides and approved meaning; review changed claims and adjacent transitions. | | New deck or substantial rewrite | Brief -> evidence -> storyline -> storyboard -> editorial review -> generation -> delivery check. | | Render approved content | Preserve wording, facts and sources; proceed to generation. Flag material contradictions rather than silently rewriting. | For an existing deck, use `pptx` to extract text, notes and relevant visuals. Text extraction alone can miss a chart's message or image-only slide; mark such content unreviewed until inspected. This skill owns editorial decisions, not in-place PPTX manipulation. Do not run two generators against the same output. ### Establish the brief Identify the audience, what they already know, their main question, and what they should understand, decide or be able to do afterwards. Record duration, language, source material, required content and delivery mode: **live talk**, **standalone reading**, or both. Ask only material unanswered questions. Label assumptions; do not invent audience research or decision authority. For a new deck or structural rewrite, confirm the **audience and depth** with the user or session coordinator before fixing the storyline. An explicit brief or authorized coordinator handoff counts as confirmation; do not ask again. If missing or contradictory, ask one focused question through the host's question tool, or route it to the coordinator. Without an answer, keep the outline provisional rather than silently deciding the audience. Executive framing emphasizes decisions, implications and concise evidence. Technical framing explains mechanisms, examples, interfaces and limits at the depth needed for the task. Technical does not automatically mean more slides; respect the time available. For mixed audiences, confirm the primary objective and layer detail rather than averaging their needs. A live slide supports a speaker; a read-ahead must explain itself. If both are needed, derive two views from the same content, not one compromise with hidden essential context. Honor the user's requested scope and output format. ### Build the argument Read [content planning](references/content.md) for new storylines and [evidence rules](references/evidence.md) when using factual claims or data. Start from the audience's question, inspect the material, then formulate a provisional central message. Test it against contrary evidence. Change or qualify the message when the evidence disagrees; do not cherry-pick support. Choose a structure for the actual purpose: decision, explanation, persuasion, training or update. Write a title-only storyline before laying out slides. Each step must answer a relevant question and connect to the next. Source document headings are not automatically slide boundaries. ### Give a complete deck a beginning and an ending For a new complete deck, default to **cover -> introduction/framing -> development -> wrap-up/closing**. Use a cover with a meaningful title, presentation date and speaker or team attribution. Confirm missing cover metadata; do not invent a speaker/team or silently use today's date as the event date. Keep unresolved fields in the draft brief, not placeholders in a supposedly finished file. An explicit user-approved omission is valid. The introduction establishes the problem, context or question and why the topic matters; an agenda is optional. For executives, surface the recommendation early. The development follows the purpose-specific argument. End with a substantive takeaway and the relevant decision, next step, learning check or open question. The wrap-up may itself be the closing slide; do not add a redundant "Thank you" slide to satisfy a count. Put optional backup material after the main closing. These are default roles, not a fixed number of slides or mandatory section dividers. A short deck can combine roles; simplified slides are welcome. Do not prepend a cover to an excerpt, retrofit a targeted revision, or restructure an approved deck without a relevant request. See [content planning](references/content.md). ### Draft the storyboard Use [the storyboard template](templates/storyboard.md), or equivalent fields in an existing brief. Keep one content source of truth, not duplicate manifests. For each substantive slide, specify its role, message, support, implication, material caveat, source and placement between slide, notes and appendix. See [worked examples](references/examples.md) for concrete rewrites. Prefer message titles over topic labels when making an argument. The title must not claim more than its support. Cover slides, agendas, questions and exercises need not pretend to be factual assertions. One coherent message can require several facts; do not enforce three bullets, ten slides or a word quota. Choose a chart, diagram, comparison, example or text because it explains the message. A decorative icon is not evidence. Keep claims intelligible to the audience: define unfamiliar terms, show mechanisms, give concrete examples. Never manufacture metrics, quotations, testimonials or citations to fill a slide. ### Review before rendering Apply [editorial and delivery review](references/review.md). Check the title sequence for gaps and repetition, each claim against its evidence, and whether important objections, alternatives and limits remain visible. Estimate timing including explanation, demos and discussion; label estimates until rehearsed. If sources are insufficient, identify the missing proof and its consequence. Offer a qualified draft or targeted evidence request, not a fabricated conclusion. Reuse prior approvals. For substantial new direction, settle material open decisions before expensive rendering; an authorized end-to-end request does not need a second routine approval gate. Audit-only work stops at findings. ### Generate and verify Choose the rendering path before styling. Keep direct `python-pptx` generation for routine work, approved layouts and short edits. If browser-first iteration would help a new visual composition, read [browser-first delivery](references/browser-first.md): agree what must remain editable, prove export on representative slides early, then iterate and export the complete deck. Do not assume arbitrary HTML/CSS converts into native shapes. Do not silently replace an editable deliverable with slide-sized images. For the direct path, generate a Python script using the patterns below, then produce the `.pptx`. Use approved branding; presets are options, not reasons to change the content. Do not shrink away readability or silently drop qualifications to fit a layout. Split or restructure overloaded slides while preserving the argument. Reopen the generated file and compare its text, chart/table values and notes with the storyboard. Verify numbers, sources and material caveats survived. Inspect rendered slides for readability, clipping and misleading visual emphasis when a renderer is available. A successful import is not visual QA. If rendering or application opening is unavailable, report that limitation explicitly. For browser-first work, the browser review is an intermediate check, not final PowerPoint QA. Verify the exported slides, notes, fonts, slide count and agreed editable objects; disclose any rasterized elements or fallback slides. Deliver the requested artifact, not internal review chatter inside the deck. State material unresolved content or delivery limitations. For editorial-only requests, a reviewed storyboard is the output; do not generate an unwanted file. ## Core Patterns ### Slide Setup (16:9 Widescreen) ```python from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.enum.shapes import MSO_SHAPE prs = Presentation() prs.slide_width = Inches(13.333) # 16:9 prs.slide_height = Inches(7.5) ``` ### Background Color ```python def set_bg(slide, color): fill = slide.background.fill fill.solid() fill.fore_color.rgb = color ``` ### Text Box ```python def text_box(slide, left, top, width, height, text, font_size=14, color=RGBColor(0xF1,0xF5,0xF9), bold=False, align=PP_ALIGN.LEFT, font="Segoe UI"): box = slide.shapes.add_textbox( Inches(left), Inches(top), Inches(width), Inches(height)) box.text_frame.word_wrap = True p = box.text_frame.paragraphs[0] p.text = text p.font.size = Pt(font_size) p.font.color.rgb = color p.font.bold = bold p.font.name = font p.alignment = align return box ``` ### Bullet List ```python def bullet_list(slide, left, top, width, height, items, font_size=14, color=RGBColor(0xF1,0xF5,0xF9)): box = slide.shapes.add_textbox( Inches(left), Inches(top), Inches(width), Inches(height)) tf = box.text_frame tf.word_wrap = True for i, text in enumerate(items): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() p.text = f"▸ {text}" p.font.size = Pt(font_size) p.font.color.rgb = color p.font.name = "Segoe UI" p.space_before = Pt(14) return box ``` ### Rounded Rectangle Card ```python def card(slide, left, top, width, height, fill=RGBColor(0x16,0x20,0x36), border=RGBColor(0x1E,0x29,0x3B)): shape = slide.shapes.add_shape( MSO_SHAPE.ROUNDED_RECTANGLE, Inches(left), Inches(top), Inches(width), Inches(height)) shape.fill.solid() shape.fill.fore_color.rgb = fill shape.line.color.rgb = border shape.line.width = Pt(1) return shape ``` ### Accent Bar (decorative line) ```python def accent_bar(slide, left, top, width=1.2, height=0.055, color=RGBColor(0x38,0x9F,0xF7)): s = slide.shapes.add_shape( 1, Inches(left), Inches(top), Inches(width), Inches(height)) s.fill.solid() s.fill.fore_color.rgb = color s.line.fill.background() ``` ### Speaker Notes ```python def add_notes(slide, text): slide.notes_slide.notes_text_frame.text = text ``` > **Polish pass (optional but recommended).** Speaker notes are pure prose > read aloud during the demo — AI-prose tells degrade credibility. After > the deck is assembled, run [`gbb-humanizer`](../gbb-humanizer/) over the > notes text using the pre-canned `gbb-seller-pitch.md` voice sample. > **Do not** humanize slide bullets or titles — those need to stay punchy > and parallel; the humanizer's section-aware mode skips them by default. For content-first decks, notes should explain rather than simply repeat the slide. Put the full source locator and optional spoken transition here, but keep qualifications that change the headline's meaning on the slide itself. If applying `gbb-humanizer`, restrict it to prose: preserve sources, numbers, uncertainty and quotations. Recheck meaning afterwards. ### Save with Lock Detection ```python import os, time out = "output.pptx" if os.path.exists(out): try: with open(out, "ab"): pass except PermissionError: ts = time.strftime("%Y%m%d-%H%M%S") out = f"output-{ts}.pptx" prs.save(out) ``` ## Theme Presets These are optional rendering presets. Follow an existing brand or explicit user choice; content review does not require a theme change. ### Dark Navy (ThreadLight style) ```python BG = RGBColor(0x0F, 0x17, 0x2A) # Background CARD = RGBColor(0x16, 0x20, 0x36) # Card fill BLUE = RGBColor(0x38, 0x9F, 0xF7) # Primary accent CYAN = RGBColor(0x06, 0xB6, 0xD4) # Secondary accent WHITE = RGBColor(0xF1, 0xF5, 0xF9) # Primary text MUTED = RGBColor(0x94, 0xA3, 0xB8) # Secondary text DIM = RGBColor(0x64, 0x74, 0x8B) # Tertiary text GREEN = RGBColor(0x22, 0xC5, 0x5E) # Success AMBER = RGBColor(0xF5, 0x9E, 0x0B) # Warning/highlight RED = RGBColor(0xEF, 0x44, 0x44) # Error/negative ``` ### Light Corporate ```python BG = RGBColor(0xFF, 0xFF, 0xFF) CARD = RGBColor(0xF8, 0xFA, 0xFC) BLUE = RGBColor(0x00, 0x78, 0xD4) # Microsoft Blue WHITE = RGBColor(0x1A, 0x1A, 0x2E) # Dark text on light MUTED = RGBColor(0x60, 0x60, 0x60) ``` ## Slide Layout Recipes These recipes are rendering starting points, not narrative structures. A layout, decorative accent or three-item example does not determine what must be said. For live projection, adapt text size to the actual room and viewing distance. ### Title Slide - Include the confirmed presentation date and speaker or team attribution - Apply the complete-deck default above; do not invent missing metadata - Accent bar at ~30% from top - Title: 44-48pt bold - Tagline: 20-22pt accent color - Subtitle: 14pt muted - Footer: 11pt dim at bottom ### Content Slide with Bullets - Accent bar at top-left - Title: 28-30pt bold - Bullet list: 14-15pt with ▸ prefix and 14-18pt spacing - Optional highlight quote at bottom in accent color ### Two-Column Comparison - Two side-by-side cards (each ~5.4" wide on 16:9) - Column headers in accent colors - ✓ / ✗ prefixes for positive / negative items ### Card Grid (2×3 or 2×2) - Cards with title (accent color, bold) + description (muted) - Column spacing: `x = margin + col * card_pitch` ### Timeline / Steps - Numbered badge cards (accent fill) - Title + description on same row - Optional time value right-aligned ## Tips - Use `Inches()` for all positioning — never raw EMU values - 16:9 canvas is 13.333 × 7.5 inches; keep content within 1" margins - Font hierarchy: Title 28-48pt → Heading 16-20pt → Body 12-15pt → Caption 10-11pt - Use `word_wrap = True` on all text frames - Keep text boxes slightly taller than needed to prevent clipping - Reopen with `python-pptx` for file integrity; also perform the content and rendered checks above - For locked files (open in PowerPoint), auto-version the output filename ## Example: Complete Slide ```python slide = prs.slides.add_slide(prs.slide_layouts[6]) # blank layout set_bg(slide, BG) accent_bar(slide, 1, 0.6) text_box(slide, 1, 0.8, 11, 0.6, "Slide Title Here", 30, WHITE, True) bullet_list(slide, 1, 1.7, 11, 4, [ "First bullet point with key insight", "Second bullet point with supporting data", "Third bullet point with call to action", ], 15, WHITE) card(slide, 1, 5.5, 11.3, 1) text_box(slide, 1.4, 5.65, 10.5, 0.7, '"Closing quote or key takeaway"', 14, CYAN) add_notes(slide, "Speaker notes with source links here") prs.save("output.pptx") ``` This is a mechanical rendering example, not a content-quality exemplar. Replace its placeholders with reviewed storyboard content; use the worked examples for message, evidence and caveat choices. ## Validation boundaries The [acceptance scenarios](tests/scenarios.md) exercise editorial decisions; automated contract checks do not prove model behavior or audience comprehension. Preserve the historical generation check in [the validation record](references/last_validated.yaml). Do not claim a before/after improvement on a real deck without the original and an observed comparison. Source changes are not automatic installation or release. ## Reference map Load only the relevant reference; do not read every file for a two-slide edit. | Reference | Use | |---|---| | [Content planning](references/content.md) | Audience questions, narrative choices and content allocation | | [Evidence](references/evidence.md) | Provenance, calculations, uncertainty and research basis | | [Examples](references/examples.md) | Before/after rewrites with reasoning and limits | | [Review](references/review.md) | Editorial checks, severity and post-render preservation | | [Browser-first delivery](references/browser-first.md) | Optional HTML iteration, editability, early export proof and model-selection limits | | [Storyboard](templates/storyboard.md) | Reusable minimal content contract | | [Acceptance scenarios](tests/scenarios.md) | Behavioral probes and actual-output acceptance | ## See Also | Skill | Use When | |-------|----------| | [**gbb-humanizer**](../gbb-humanizer/) | **Polish pass** for speaker notes after the deck is generated. Section-aware mode skips slide bullets and titles (which need to stay punchy and parallel) and only rewrites the prose inside `notes_slide.notes_text_frame.text`. Use the pre-canned `gbb-seller-pitch.md` voice sample. | | [**threadlight-design**](https://github.com/aiappsgbb/threadlight-skills/tree/main/skills/threadlight-design/) | Generates the SpecKit + `overview.html` that this deck's slides typically narrate — the deck is often a re-projection of the same content for an audience that prefers slides to long-form HTML. |
在 GitHub 查看