wps-ppt-gen

wps-ppt-gen is a skill for Claude Code from Bwkyd/wps-skills. It costs 75 tokens per session (3,431 once invoked), scanned A, original, MIT.

A presentation generator that turns a topic or outline into a complete PowerPoint file, including title, contents, main content, and summary slides.

In plain words
What is it for?
Use it for work reports, project updates, product introductions, training materials, proposals, and other presentations in several visual styles.
Why use it?
It helps when you need a finished slide deck but do not want to build every slide and layout from scratch.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

Good fit Use it for work reports, project updates, product introductions, training materials, proposals, and other presentations in several visual styles.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/bwkyd/wps-skills/wps-ppt-gen
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add Bwkyd/wps-skills --skill wps-ppt-gen
Clone the repo
git clone --depth 1 https://github.com/Bwkyd/wps-skills

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for wps-ppt-gen

README.md
[![agentmods](https://agentmods.dev/badge/skills/bwkyd/wps-skills/wps-ppt-gen/github.svg)](https://agentmods.dev/skills/bwkyd/wps-skills/wps-ppt-gen)
Your own site
<a href="https://agentmods.dev/skills/bwkyd/wps-skills/wps-ppt-gen"><img src="https://agentmods.dev/badge/skills/bwkyd/wps-skills/wps-ppt-gen/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for wps-ppt-gen

Your own site · 80×15
<a href="https://agentmods.dev/skills/bwkyd/wps-skills/wps-ppt-gen"><img src="https://agentmods.dev/badge/skills/bwkyd/wps-skills/wps-ppt-gen.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 75 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,431 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00075 $0.03431
Opus 5 $0.00037 $0.01716
Sonnet 5 $0.00015 $0.00686
Haiku 4.5 $0.00007 $0.00343

Measured 11d ago against content hash 9c51736e5b6c, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

wps-ppt-gen scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/wps-ppt-gen/SKILL.md · 375 lines

How it starts

The opening of the file, as written. The whole thing — 375 lines — stays where its author put it; the contents beside it link to each section on GitHub.

WPS PPT 生成器

从主题大纲 → 自动生成完整的精美 PPT(.pptx)。

When to Use

  • 用户需要制作PPT/演示文稿
  • 用户说"帮我做一个PPT"
  • 用户需要述职报告/项目汇报/产品介绍/培训课件等PPT
  • 用户有内容大纲想转成PPT

When NOT to Use

  • 只需要PPT大纲不需要文件 → 使用 wps-ppt-outline
  • 已有PPT需要美化 → 使用 wps-ppt-polish
  • 需要教学课件特殊排版 → 使用 wps-courseware

风格选择菜单

┌─────────────────────────────────────────────┐
│        WPS PPT 风格选择                      │
├─────────────────────────────────────────────┤
│                                             │
│  [1] 📊 简约商务  白底+深色文字+蓝色强调    │
│  [2] 🚀 科技风    深色底+渐变+几何元素       │
│  [3] 🏛️ 党政风    红色主调+庄重+国徽元素     │
│  [4] 📚 教育风    清新+活泼配色+图文混排     │
│  [5] 🎨 创意风    大图背景+极简文字          │
│  [6] 📈 数据风    图表为主+数据驱动          │
│                                             │
│  输入编号或风格名称选择                      │
└─────────────────────────────────────────────┘

工作流程

Step 1: 确认需求

  • 主题:PPT的主题是什么?
  • 场景:述职/汇报/产品/培训/竞标/其他?
  • 页数:期望多少页?(默认15-20页)
  • 风格:从上方菜单选择(默认简约商务)
  • 特殊要求:是否需要图表?是否有固定模板?

Step 2: 生成大纲

根据场景生成PPT结构大纲:

述职报告(推荐15-20页):

1. 封面(标题+姓名+部门+日期)
2. 目录
3-4. 工作回顾(KPI完成情况)
5-7. 重点项目(每项1-2页)
8-9. 数据成果(图表页)
10-11. 经验总结与反思
12-13. 下阶段计划
14. 需要的支持
15. 感谢页

项目汇报(推荐12-15页):

1. 封面
2. 目录
3. 项目背景
4-5. 项目目标与范围
6-8. 实施进展(里程碑)
9-10. 关键成果/数据
11. 风险与问题
12. 下一步计划
13. 时间表
14. 资源需求
15. Q&A

产品介绍(推荐10-15页):

1. 封面(产品名+Slogan)
2. 痛点/市场背景
3. 解决方案概览
4-6. 核心功能(每项1页)
7. 竞品对比
8-9. 客户案例/数据
10. 定价方案
11. 合作流程
12. 联系方式

Step 3: 生成 .pptx 文件

确保依赖:

pip install python-pptx 2>/dev/null || pip3 install python-pptx 2>/dev/null

核心代码框架:

from pptx import Presentation
from pptx.util import Inches, Pt, Mm, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
import os

class PPTGenerator:
    """中式PPT生成器"""

    # 预置风格配色
    THEMES = {
        'business': {
            'name': '简约商务',
            'bg': RGBColor(0xFF, 0xFF, 0xFF),
            'title': RGBColor(0x1F, 0x38, 0x64),
            'accent': RGBColor(0x2B, 0x57, 0x9A),
            'text': RGBColor(0x33, 0x33, 0x33),
            'light': RGBColor(0xE8, 0xEE, 0xF7),
            'title_font': '微软雅黑',
            'body_font': '微软雅黑',
        },
        'tech': {
            'name': '科技风',
            'bg': RGBColor(0x0A, 0x1A, 0x2F),
            'title': RGBColor(0xFF, 0xFF, 0xFF),
            'accent': RGBColor(0x00, 0xD4, 0xFF),
            'text': RGBColor(0xCC, 0xCC, 0xCC),
            'light': RGBColor(0x15, 0x2A, 0x45),
            'title_font': '微软雅黑',
            'body_font': '微软雅黑',
        },
        'gov': {
            'name': '党政风',
            'bg': RGBColor(0xFF, 0xFF, 0xFF),
            'title': RGBColor(0xCC, 0x00, 0x00),
            'accent': RGBColor(0xCC, 0x00, 0x00),
            'text': RGBColor(0x33, 0x33, 0x33),
            'light': RGBColor(0xFF, 0xE8, 0xE8),
            'title_font': '方正小标宋简体',
            'body_font': '仿宋_GB2312',
        },
        'edu': {
            'name': '教育风',
            'bg': RGBColor(0xFF, 0xFF, 0xFF),
            'title': RGBColor(0x2E, 0x75, 0xB6),
            'accent': RGBColor(0x4C, 0xAF, 0x50),
            'text': RGBColor(0x33, 0x33, 0x33),
            'light': RGBColor(0xE3, 0xF2, 0xFD),
            'title_font': '微软雅黑',
            'body_font': '微软雅黑',
        },
    }

    def __init__(self, theme='business', widescreen=True):
        self.prs = Presentation()
        self.theme = self.THEMES.get(theme, self.THEMES['business'])

        # 宽屏16:9(默认)或4:3
        if widescreen:
            self.prs.slide_width = Mm(338.67)
            self.prs.slide_height = Mm(190.5)
        else:
            self.prs.slide_width = Mm(254)
            self.prs.slide_height = Mm(190.5)

        self.slide_width = self.prs.slide_width
        self.slide_height = self.prs.slide_height

    def add_bg(self, slide, color=None):
        """设置幻灯片背景色"""
        bg = slide.background
        fill = bg.fill
        fill.solid()
        fill.fore_color.rgb = color or self.theme['bg']

    def add_shape(self, slide, left, top, width, height, color=None):
        """添加色块装饰"""
        shape = slide.shapes.add_shape(
            MSO_SHAPE.RECTANGLE, left, top, width, height
        )
        shape.fill.solid()
        shape.fill.fore_color.rgb = color or self.theme['accent']
        shape.line.fill.background()
        return shape

    def add_text_box(self, slide, left, top, width, height, text,
                     font_size=18, font_color=None, font_name=None,
                     bold=False, alignment=PP_ALIGN.LEFT):
        """添加文本框"""
        txBox = slide.shapes.add_textbox(left, top, width, height)
        tf = txBox.text_frame
        tf.word_wrap = True
        p = tf.paragraphs[0]
        p.text = text
        p.font.size = Pt(font_size)
        p.font.color.rgb = font_color or self.theme['text']
        p.font.name = font_name or self.theme['body_font']
        p.font.bold = bold
        p.alignment = alignment
        return txBox

    def add_cover(self, title, subtitle='', author='', date=''):
        """封面页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])  # 空白
        self.add_bg(slide)

        # 左侧装饰条
        self.add_shape(slide, Mm(0), Mm(0), Mm(12), self.slide_height)

        # 标题
        self.add_text_box(
            slide, Mm(30), Mm(50), Mm(280), Mm(50), title,
            font_size=36, font_color=self.theme['title'],
            font_name=self.theme['title_font'], bold=True,
            alignment=PP_ALIGN.LEFT
        )

        # 副标题
        if subtitle:
            self.add_text_box(
                slide, Mm(30), Mm(105), Mm(280), Mm(30), subtitle,
                font_size=20, font_color=self.theme['accent']
            )

        # 作者+日期
        info = f'{author}    {date}' if author else date
        if info.strip():
            self.add_text_box(
                slide, Mm(30), Mm(150), Mm(280), Mm(20), info,
                font_size=14, font_color=self.theme['text']
            )

    def add_toc(self, items):
        """目录页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        self.add_bg(slide)

        self.add_text_box(
            slide, Mm(30), Mm(15), Mm(100), Mm(20), '目录',
            font_size=28, font_color=self.theme['title'],
            font_name=self.theme['title_font'], bold=True
        )

        # 装饰线
        self.add_shape(slide, Mm(30), Mm(40), Mm(60), Mm(2))

        for i, item in enumerate(items):
            y = Mm(55 + i * 22)
            # 序号
            num_shape = self.add_shape(
                slide, Mm(30), y, Mm(10), Mm(10),
                self.theme['accent']
            )
            num_shape.text_frame.paragraphs[0].text = str(i + 1).zfill(2)
            num_shape.text_frame.paragraphs[0].font.size = Pt(11)
            num_shape.text_frame.paragraphs[0].font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
            num_shape.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER

            # 标题
            self.add_text_box(
                slide, Mm(48), y, Mm(250), Mm(15), item,
                font_size=16, bold=False
            )

    def add_content_slide(self, title, bullets, note=''):
        """内容页(标题+要点列表)"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        self.add_bg(slide)

        # 标题区
        self.add_shape(slide, Mm(0), Mm(0), self.slide_width, Mm(40),
                       self.theme['light'])
        self.add_text_box(
            slide, Mm(30), Mm(8), Mm(280), Mm(25), title,
            font_size=24, font_color=self.theme['title'],
            font_name=self.theme['title_font'], bold=True
        )

        # 要点列表
        for i, bullet in enumerate(bullets):
            y = Mm(55 + i * 25)
            # 圆点
            self.add_shape(slide, Mm(30), y + Mm(4), Mm(4), Mm(4),
                          self.theme['accent'])
            # 文本
            self.add_text_box(
                slide, Mm(40), y, Mm(270), Mm(20), bullet,
                font_size=16
            )

    def add_thank_slide(self, text='感谢聆听', subtext='THANK YOU'):
        """感谢页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        self.add_bg(slide)

        self.add_text_box(
            slide, Mm(0), Mm(60), self.slide_width, Mm(40), text,
            font_size=44, font_color=self.theme['title'],
            font_name=self.theme['title_font'], bold=True,
            alignment=PP_ALIGN.CENTER
        )
        self.add_text_box(
            slide, Mm(0), Mm(110), self.slide_width, Mm(20), subtext,
            font_size=18, font_color=self.theme['accent'],
            alignment=PP_ALIGN.CENTER
        )

    def save(self, filename):
        self.prs.save(filename)
        return os.path.abspath(filename)

Read the full file on GitHub · 375 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 11d ago First seen · 375 lines · 75 tokens per session scan A 9c51736e5b6c

Subscribe to this mod's changes

wps-ppt-gen is a skill published in the GitHub repository Bwkyd/wps-skills (7 stars, last pushed 4mo ago), licensed MIT. It adds 75 tokens to every session and 3,431 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

docx-template-translator

Adaptive conversion of LaTeX, PDF, or Markdown sources into a complete Word .docx that follows a user-supplied .docx template. Use when pandoc --reference-doc alone is not enough — for thesis, dissertation, report, or institutional Word formatting that needs cover pages, declarations, TOC, heading numbering, captions…

zouchenzhen/docx-template-translator-skill · 87 tokens

法律文件脱敏处理

A browser-based and Python tool for removing sensitive details from legal Word documents and restoring them later. It can replace information such as names, dates, prices, bank accounts and case numbers while preserving document formatting.

moyupeng0422/legal-doc-redactor · 128 tokens

note-organizer

Use this skill whenever the user wants to organize course materials, lecture notes, PPT/PDF/DOCX files, textbooks, personal notes, senior-student notes, historical exams, review questions, standards, manuals, or scattered study resources into a structured Markdown note library. Use it even when the user only says…

Renakoni/note-organizer · 228 tokens

exhibition-outline

A template for turning an exhibition plan into a three-page presentation outline. The pages cover the theme, its explanation and visitor story, and a detailed area-by-area display plan.

Amalia6767/curator-skills · 60 tokens

tender-analysis

A workflow for reviewing tender documents, which are formal project requests that describe requirements and bidding rules. It extracts project details, technical and business conditions, deadlines, scoring rules, risks, and questions for clarification.

Amalia6767/curator-skills · 85 tokens

docx

Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when…

lingxling/awesome-skills-cn · 168 tokens