Slides
fcakyon/claude-codex-settings
Create and edit presentation slide decks (.pptx) with PptxGenJS, bundled layout helpers, and render/validation utilities.
A skill your agent uses when the user requests to generate, create, or make presentations (PPT/PPTX).
$ npx skills add peintune/runjam --skill ppt-generation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install peintune/runjam ppt-generation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/ppt-generation .claude/skills/ppt-generation && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .claude/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add peintune/runjam --skill ppt-generation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install peintune/runjam ppt-generation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.codex/skills/ppt-generation .agents/skills/ppt-generation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .agents/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add peintune/runjam --skill ppt-generation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install peintune/runjam ppt-generation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.codex/skills/ppt-generation .cursor/skills/ppt-generation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .cursor/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/peintune/runjam.git --path .codex/skills/ppt-generation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add peintune/runjam --skill ppt-generation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install peintune/runjam ppt-generation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.codex/skills/ppt-generation .gemini/skills/ppt-generation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .gemini/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install peintune/runjam ppt-generationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add peintune/runjam --skill ppt-generation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .github/skills && cp -r skills-src/.codex/skills/ppt-generation .github/skills/ppt-generation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .github/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add peintune/runjam --skill ppt-generation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install peintune/runjam ppt-generation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/peintune/runjam.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.codex/skills/ppt-generation .opencode/skills/ppt-generation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ppt-generation" agent skill from https://github.com/peintune/runjam/tree/main/.codex/skills/ppt-generation into .opencode/skills/ppt-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-generation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ppt-generationA skill your agent uses when the user requests to generate, create, or make presentations (PPT/PPTX).
Ppt Generation is an agent skill from peintune/runjam. Use this skill when the user requests to generate, create, or make presentations (PPT/PPTX). Has TWO workflows: (1) Primary — AI-generated full-slide images composed via scripts/generate.py; (2) Fallback — python-pptx programmatic slides (all text editable, better for reports/project management). The fallback auto-activates when image-generation or the compose script is missing. Final PPTX always goes to ./outputs/.
Its SKILL.md is about 7.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Documents & Office, covering Slides and decks, PowerPoint presentations and Image generation. It works with Microsoft PowerPoint and python-pptx. The repository describes itself as: One desktop for all your AI coding Agent — Claude Code, Codex CLI & Gemini CLI. Auto-detect, one-click install, unified chat, file explorer, terminal & editor. Local-first. Built… The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b186c61. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythonpipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ppt Generation loads about 7.1k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,175 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from peintune/runjam at commit b186c61, republished under its MIT licence (© peintune). 1,175 words, ~7,132 tokens.
.claude/skills/ppt-generation/SKILL.md (or your agent's skills folder).⚠️ This skill has TWO workflows. Always run the Dependency Check first and pick the right one — do NOT assume the image-based path works.
- Primary (image-based): Requires
image-generationskill +scripts/generate.py. Generates full-slide images and composes them into PPTX.- Fallback (python-pptx): Use when image-generation or the compose script is missing. Creates slides programmatically with
python-pptx— all text is editable, copyable, searchable. This is the BETTER choice for project management, reports, and data-heavy presentations.Output path rule (from
runjam-defaults): The final.pptxfile MUST be placed in./outputs/. Before starting:mkdir -p ./outputs. Never output to arbitrary directories.
This skill generates professional PowerPoint presentations. The primary workflow uses AI-generated images for each slide (composed via scripts/generate.py). When those dependencies are unavailable, the fallback workflow builds slides natively with python-pptx — all text remains editable, which is usually the preferred delivery for project-management decks, reports, and any content the user's team needs to modify.
Choose one of the following styles when creating the presentation plan:
| Style | Description | Best For |
|---|---|---|
| glassmorphism | Frosted glass panels with blur effects, floating translucent cards, vibrant gradient backgrounds, depth through layering | Tech products, AI/SaaS demos, futuristic pitches |
| dark-premium | Rich black backgrounds (#0a0a0a), luminous accent colors, subtle glow effects, luxury brand aesthetic | Premium products, executive presentations, high-end brands |
| gradient-modern | Bold mesh gradients, fluid color transitions, contemporary typography, vibrant yet sophisticated | Startups, creative agencies, brand launches |
| neo-brutalist | Raw bold typography, high contrast, intentional "ugly" aesthetic, anti-design as design, Memphis-inspired | Edgy brands, Gen-Z targeting, disruptive startups |
| 3d-isometric | Clean isometric illustrations, floating 3D elements, soft shadows, tech-forward aesthetic | Tech explainers, product features, SaaS presentations |
| editorial | Magazine-quality layouts, sophisticated typography hierarchy, dramatic photography, Vogue/Bloomberg aesthetic | Annual reports, luxury brands, thought leadership |
| minimal-swiss | Grid-based precision, Helvetica-inspired typography, bold use of negative space, timeless modernism | Architecture, design firms, premium consulting |
| keynote | Apple-inspired aesthetic with bold typography, dramatic imagery, high contrast, cinematic feel | Keynotes, product reveals, inspirational talks |
Before starting any workflow, check what's actually available:
../image-generation/SKILL.md exists → image-based primary workflow possible?./scripts/generate.py exists → compose script available?python-pptx: python -c "import pptx" 2>&1 (needed for both compose and fallback)Decision matrix:
| image-generation skill | scripts/generate.py | python-pptx | Workflow |
|---|---|---|---|
| ✅ present | ✅ present | ✅ installed | Primary (image-based) |
| ❌ missing | ❌ missing | ✅ installed | Fallback (python-pptx) — tell the user you switched and why |
| ❌ missing | ❌ missing | ❌ missing | Install python-pptx first: pip install python-pptx, then use Fallback |
| ⚠️ any mix | ⚠️ any mix | ✅ installed | Use Fallback — avoid partial image workflow; the compose chain breaks without ALL pieces |
Note: In most RunJam installations today, neither image-generation nor scripts/generate.py ship with the app. Assume Fallback unless you explicitly see both present.
When a user requests presentation generation, identify:
.Create a JSON file in ./workspace/ with the presentation structure. Important: Include the style field to define the overall visual consistency.
{
"title": "Presentation Title",
"style": "keynote",
"style_guidelines": {
"color_palette": "Deep black backgrounds, white text, single accent color (blue or orange)",
"typography": "Bold sans-serif headlines, clean body text, dramatic size contrast",
"imagery": "High-quality photography, full-bleed images, cinematic composition",
"layout": "Generous whitespace, centered focus, minimal elements per slide"
},
"aspect_ratio": "16:9",
"slides": [
{
"slide_number": 1,
"type": "title",
"title": "Main Title",
"subtitle": "Subtitle or tagline",
"visual_description": "Detailed description for image generation"
},
{
"slide_number": 2,
"type": "content",
"title": "Slide Title",
"key_points": ["Point 1", "Point 2", "Point 3"],
"visual_description": "Detailed description for image generation"
}
]
}IMPORTANT: Generate slides strictly one by one, in order. Do NOT parallelize or batch image generation. Each slide depends on the previous slide's output as a reference image. Generating slides in parallel will break visual consistency and is not allowed.
../image-generation/SKILL.md{
"prompt": "Professional presentation slide. [style_guidelines from plan]. Title: 'Your Title'. [visual_description]. This slide establishes the visual language for the entire presentation.",
"style": "[Based on chosen style - e.g., Apple Keynote aesthetic, dramatic lighting, cinematic]",
"composition": "Clean layout with clear text hierarchy, [style-specific composition]",
"color_palette": "[From style_guidelines]",
"typography": "[From style_guidelines]"
}python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/slide-01-prompt.json \
--output-file ./outputs/slide-01.jpg \
--aspect-ratio 16:9{
"prompt": "Professional presentation slide continuing the visual style from the reference image. Maintain the same color palette, typography style, and overall aesthetic. Title: 'Slide Title'. [visual_description]. Keep visual consistency with the reference.",
"style": "Match the style of the reference image exactly",
"composition": "Similar layout principles as reference, adapted for this content",
"color_palette": "Same as reference image",
"consistency_note": "This slide must look like it belongs in the same presentation as the reference image"
}python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/slide-02-prompt.json \
--reference-images ./outputs/slide-01.jpg \
--output-file ./outputs/slide-02.jpg \
--aspect-ratio 16:9# Slide 3 references slide 2
python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/slide-03-prompt.json \
--reference-images ./outputs/slide-02.jpg \
--output-file ./outputs/slide-03.jpg \
--aspect-ratio 16:9
# Slide 4 references slide 3
python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/slide-04-prompt.json \
--reference-images ./outputs/slide-03.jpg \
--output-file ./outputs/slide-04.jpg \
--aspect-ratio 16:9After all slide images are generated, call the composition script:
python scripts/generate.py \
--plan-file ./workspace/presentation-plan.json \
--slide-images ./outputs/slide-01.jpg ./outputs/slide-02.jpg ./outputs/slide-03.jpg \
--output-file ./outputs/presentation.pptxParameters:
--plan-file: Absolute path to the presentation plan JSON file (required)--slide-images: Absolute paths to slide images in order (required, space-separated)--output-file: Absolute path to output PPTX file (required)
[!NOTE]
Do NOT read the python file, just call it with the parameters.Use this workflow when the image-generation skill OR scripts/generate.py is not available. This approach creates slides natively using python-pptx, resulting in real PowerPoint files where all text is editable, copyable, and searchable. For project management decks, status reports, training material, and data-heavy content this is usually the better deliverable — your user's team can edit slides directly.
⚠️ Run these from the SESSION WORKING DIRECTORY (session root), NOT from inside the skill folder. If pwd contains skills/, cd up to the session root first.
pwd # MUST show session root, NOT .../skills/ppt-generation
mkdir -p ./outputs ./workspace
# Check python-pptx
python -c "import pptx" 2>&1
# If the above fails → install:
# pip install python-pptxDo NOT create outputs/ or workspace/ inside .claude/skills/ppt-generation/. That is the #1 mistake — skill folders are read-only. See runjam-defaults §0.
Create a Python script at ./workspace/build_<deck-name>_pptx.py (in the session root's workspace, NOT the skill folder). Use this pattern:
import os
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE
# --- Path safety guard (from runjam-defaults §0) ---
# Ensure outputs land in the session working directory, NOT inside a skill folder.
# If cwd contains '.claude/skills' or '.codex/skills' or '.gemini/skills',
# walk up to the session root (parent of the .claude/.codex/.gemini dir).
_cwd = os.getcwd()
for _marker in ('.claude', '.codex', '.gemini'):
_idx = _cwd.find(os.sep + _marker + os.sep + 'skills')
if _idx != -1:
os.chdir(_cwd[:_idx])
break
SESSION_ROOT = os.getcwd()
OUTPUTS_DIR = os.path.join(SESSION_ROOT, 'outputs')
WORKSPACE_DIR = os.path.join(SESSION_ROOT, 'workspace')
os.makedirs(OUTPUTS_DIR, exist_ok=True)
os.makedirs(WORKSPACE_DIR, exist_ok=True)
# --- Configuration ---
OUTPUT_PATH = os.path.join(OUTPUTS_DIR, "project-management-best-practices.pptx")
ASPECT_W, ASPECT_H = Inches(13.333), Inches(7.5) # 16:9
# Color palette (pick one consistent theme; see presets below)
BG = RGBColor(0x0F, 0x17, 0x2A) # deep navy bg
ACCENT = RGBColor(0x3B, 0x82, 0xF6) # primary blue
ACCENT_2 = RGBColor(0x10, 0xB9, 0x81) # secondary green
TITLE_COLOR = RGBColor(0xFF, 0xFF, 0xFF)
BODY_COLOR = RGBColor(0xCB, 0xD5, 0xE1)
CARD_BG = RGBColor(0x1E, 0x29, 0x3B)
# Palette presets (swap BG/ACCENT*/TITLE*/BODY*/CARD_BG as needed):
# Navy executive: BG=0F172A ACCENT=3B82F6 ACCENT2=10B981 TITLE=FFFFFF BODY=CBD5E1 CARD=1E293B
# Forest & moss: BG=0E1F12 ACCENT=22C55E ACCENT2=F59E0B TITLE=FFFFFF BODY=D1FAE5 CARD=18351C
# Warm terracotta: BG=1F120B ACCENT=EA580C ACCENT2=DC2626 TITLE=FFF7ED BODY=FED7AA CARD=2E1C12
# Charcoal minimal: BG=1C1C1E ACCENT=0A84FF ACCENT2=8E8E93 TITLE=FFFFFF BODY=E5E5EA CARD=2C2C2E
# Light corporate: BG=FFFFFF ACCENT=1D4ED8 ACCENT2=047857 TITLE=0F172A BODY=475569 CARD=F1F5F9
# --- Setup presentation ---
prs = Presentation()
prs.slide_width = ASPECT_W
prs.slide_height = ASPECT_H
SLIDE_LAYOUT_BLANK = prs.slide_layouts[6] # 6 = blank
def add_slide(bg_color=BG):
s = prs.slides.add_slide(SLIDE_LAYOUT_BLANK)
b = s.background.fill
b.solid()
b.fore_color.rgb = bg_color
return s
def add_text(slide, x_in, y_in, w_in, h_in, text, *,
font_size=18, bold=False, color=BODY_COLOR,
align=PP_ALIGN.LEFT, word_wrap=True):
tb = slide.shapes.add_textbox(Inches(x_in), Inches(y_in),
Inches(w_in), Inches(h_in))
tf = tb.text_frame
tf.word_wrap = word_wrap
p = tf.paragraphs[0]
p.text = text
p.font.size = Pt(font_size)
p.font.bold = bold
p.font.color.rgb = color
p.alignment = align
return tb
def add_rect(slide, x_in, y_in, w_in, h_in, *, fill_color=CARD_BG, line_color=None):
shp = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
Inches(x_in), Inches(y_in),
Inches(w_in), Inches(h_in))
shp.fill.solid()
shp.fill.fore_color.rgb = fill_color
if line_color is None:
shp.line.fill.background()
else:
shp.line.color.rgb = line_color
shp.shadow.inherit = False
return shp
def add_accent_bar(slide, x_in, y_in, w_in=0.08, h_in=0.5, *, color=ACCENT):
shp = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
Inches(x_in), Inches(y_in),
Inches(w_in), Inches(h_in))
shp.fill.solid()
shp.fill.fore_color.rgb = color
shp.line.fill.background()
shp.shadow.inherit = False
return shp
# --- Style tier sizes (HARD RULES from runjam-defaults) ---
# Title ≥ 36pt bold, body ≥ 18pt, title ≥ 2x body size.
# Edges: ≥ 0.5in (≈1.27cm) margin. Negative space ≥ 20%.
# =========================================================
# SLIDE 1 — Title / Cover
# =========================================================
s = add_slide()
# Left accent band
add_accent_bar(s, 0.8, 2.6, w_in=0.10, h_in=2.4, color=ACCENT)
# Title
add_text(s, 1.2, 2.6, 11.0, 1.4,
"Project Management Best Practices",
font_size=44, bold=True, color=TITLE_COLOR)
# Subtitle
add_text(s, 1.2, 4.1, 11.0, 0.8,
"Deliver on Time, on Scope, on Budget — Every Time",
font_size=22, color=ACCENT)
# Footer meta row
add_text(s, 1.2, 6.3, 8.0, 0.4,
"Internal Playbook • Q3 2026",
font_size=12, color=BODY_COLOR)
# =========================================================
# SLIDE 2 — Agenda / Contents
# =========================================================
s = add_slide()
add_accent_bar(s, 0.8, 0.9, w_in=0.10, h_in=0.55, color=ACCENT)
add_text(s, 1.2, 0.8, 11.0, 0.8,
"Agenda", font_size=40, bold=True, color=TITLE_COLOR)
items = [
("01", "Foundations — Goals, Scope, Stakeholders"),
("02", "Planning — WBS, Schedules, Risks, Estimates"),
("03", "Execution — Standups, Tracking, Communication"),
("04", "Controlling — Variance, Change Control, Quality"),
("05", "Closing — Handover, Retrospectives, Lessons"),
("06", "Common Failures and How to Avoid Them"),
]
y = 2.2
for num, label in items:
add_rect(s, 1.0, y, 11.3, 0.62, fill_color=CARD_BG)
add_text(s, 1.2, y+0.08, 0.8, 0.5,
num, font_size=20, bold=True, color=ACCENT)
add_text(s, 2.2, y+0.12, 9.9, 0.5,
label, font_size=18, color=BODY_COLOR)
y += 0.74
# =========================================================
# SLIDE 3+ — Build the rest iteratively
# =========================================================
# Pattern for a content slide:
# s = add_slide()
# add_accent_bar(s, 0.8, 0.9, w_in=0.10, h_in=0.55)
# add_text(s, 1.2, 0.8, 11.0, 0.8, "Section Title", font_size=40, bold=True, color=TITLE_COLOR)
# # Add cards / bullets / KPI numbers using add_rect + add_text
#
# Pattern for a bullet card (3 cards across):
# col_w, card_h = 3.84, 3.6
# gap, left0, top0 = 0.3, 1.0, 2.0
# cards = [("Title A", ["p1","p2","p3"]), ("Title B", ["..."]), ("Title C", ["..."])]
# for i, (t, bullets) in enumerate(cards):
# x = left0 + i*(col_w + gap)
# add_rect(s, x, top0, col_w, card_h)
# add_text(s, x+0.25, top0+0.2, col_w-0.5, 0.6, t, font_size=22, bold=True, color=TITLE_COLOR)
# by = top0 + 1.0
# for b in bullets:
# add_text(s, x+0.25, by, col_w-0.5, 0.45, "• " + b, font_size=16, color=BODY_COLOR)
# by += 0.5
# --- Save (ALWAYS under ./outputs/) ---
prs.save(OUTPUT_PATH)
print(f"✅ Saved: {OUTPUT_PATH}")
print(f" Slides: {len(prs.slides)}")python ./workspace/build_<deck-name>_pptx.py
# Verify output exists with non-zero size
ls -la ./outputs/*.pptxrunjam-defaults)Every deck produced via Fallback MUST satisfy:
python-pptx slide notes API after creating the slide.User request: "Create a presentation about AI product launch"
Create ./workspace/ai-product-plan.json:
{
"title": "Introducing Nova AI",
"style": "glassmorphism",
"style_guidelines": {
"color_palette": "Vibrant purple-to-cyan gradient background (#667eea→#00d4ff), frosted glass panels with 15-20% white opacity, electric accents",
"typography": "SF Pro Display style, bold 700 weight white titles with subtle text-shadow, clean 400 weight body text, excellent contrast on glass",
"imagery": "Abstract 3D glass spheres, floating translucent geometric shapes, soft luminous orbs, depth through layered transparency",
"layout": "Centered frosted glass cards with 32px rounded corners, 48-64px padding, floating above gradient, layered depth with soft shadows",
"effects": "Backdrop blur 20-40px on glass panels, subtle white border glow, soft colored shadows matching gradient, light refraction effects",
"visual_language": "Apple Vision Pro / visionOS aesthetic, premium depth through transparency, futuristic yet approachable, 2024 design trends"
},
"aspect_ratio": "16:9",
"slides": [
{
"slide_number": 1,
"type": "title",
"title": "Introducing Nova AI",
"subtitle": "Intelligence, Reimagined",
"visual_description": "Stunning gradient background flowing from deep purple (#667eea) through magenta to cyan (#00d4ff). Center: large frosted glass panel with strong backdrop blur, containing bold white title 'Introducing Nova AI' and lighter subtitle. Floating 3D glass spheres and abstract shapes around the card creating depth. Soft glow emanating from behind the glass panel. Premium visionOS aesthetic. The glass card has subtle white border (1px rgba 255,255,255,0.3) and soft purple-tinted shadow."
},
{
"slide_number": 2,
"type": "content",
"title": "Why Nova?",
"key_points": ["10x faster processing", "Human-like understanding", "Enterprise-grade security"],
"visual_description": "Same purple-cyan gradient background. Left side: floating frosted glass card with title 'Why Nova?' in bold white, three key points below with subtle glass pill badges. Right side: abstract 3D visualization of neural network as interconnected glass nodes with soft glow. Floating translucent geometric shapes (icosahedrons, tori) adding depth. Consistent glassmorphism aesthetic with previous slide."
},
{
"slide_number": 3,
"type": "content",
"title": "How It Works",
"key_points": ["Natural language input", "Multi-modal processing", "Instant insights"],
"visual_description": "Gradient background consistent with previous slides. Central composition: three stacked frosted glass cards at slight angles showing the workflow steps, connected by soft glowing lines. Each card has an abstract icon. Floating glass orbs and light particles around the composition. Title 'How It Works' in bold white at top. Depth created through card layering and transparency."
},
{
"slide_number": 4,
"type": "content",
"title": "Built for Scale",
"key_points": ["1M+ concurrent users", "99.99% uptime", "Global infrastructure"],
"visual_description": "Same gradient background. Asymmetric layout: right side features large frosted glass panel with metrics displayed in bold typography. Left side: abstract 3D globe made of glass panels and connection lines, representing global scale. Floating data visualization elements as small glass cards with numbers. Soft ambient glow throughout. Premium tech aesthetic."
},
{
"slide_number": 5,
"type": "conclusion",
"title": "The Future Starts Now",
"subtitle": "Join the waitlist",
"visual_description": "Dramatic finale slide. Gradient background with slightly increased vibrancy. Central frosted glass card with bold title 'The Future Starts Now' and call-to-action subtitle. Behind the card: burst of soft light rays and floating glass particles creating celebration effect. Multiple layered glass shapes creating depth. The most visually impactful slide while maintaining style consistency."
}
]
}Read ../image-generation/SKILL.md to understand how to generate images.
Slide 1 - Title (establishes the visual language):
Create ./workspace/nova-slide-01.json:
{
"prompt": "Ultra-premium presentation title slide with glassmorphism design. Background: smooth flowing gradient from deep purple (#667eea) through magenta (#f093fb) to cyan (#00d4ff), soft and vibrant. Center: large frosted glass panel with strong backdrop blur effect, rounded corners 32px, containing bold white sans-serif title 'Introducing Nova AI' (72pt, SF Pro Display style, font-weight 700) with subtle text shadow, subtitle 'Intelligence, Reimagined' below in lighter weight. The glass panel has subtle white border (1px rgba 255,255,255,0.25) and soft purple-tinted drop shadow. Floating around the card: 3D glass spheres with refraction, translucent geometric shapes (icosahedrons, abstract blobs), creating depth and dimension. Soft luminous glow emanating from behind the glass panel. Small floating particles of light. Apple Vision Pro / visionOS UI aesthetic. Professional presentation slide, 16:9 aspect ratio. Hyper-modern, premium tech product launch feel.",
"style": "Glassmorphism, visionOS aesthetic, Apple Vision Pro UI style, premium tech, 2024 design trends",
"composition": "Centered glass card as focal point, floating 3D elements creating depth at edges, 40% negative space, clear visual hierarchy",
"lighting": "Soft ambient glow from gradient, light refraction through glass elements, subtle rim lighting on 3D shapes",
"color_palette": "Purple gradient #667eea, magenta #f093fb, cyan #00d4ff, frosted white rgba(255,255,255,0.15), pure white text #ffffff",
"effects": "Backdrop blur on glass panels, soft drop shadows with color tint, light refraction, subtle noise texture on glass, floating particles"
}python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/nova-slide-01.json \
--output-file ./outputs/nova-slide-01.jpg \
--aspect-ratio 16:9Slide 2 - Content (MUST reference slide 1 for consistency):
Create ./workspace/nova-slide-02.json:
{
"prompt": "Presentation slide continuing EXACT visual style from reference image. SAME purple-to-cyan gradient background, SAME glassmorphism aesthetic, SAME typography style. Left side: frosted glass card with backdrop blur containing title 'Why Nova?' in bold white (matching reference font style), three feature points as subtle glass pill badges below. Right side: abstract 3D neural network visualization made of interconnected glass nodes with soft cyan glow, floating in space. Floating translucent geometric shapes (matching style from reference) adding depth. The frosted glass has identical treatment: white border, purple-tinted shadow, same blur intensity. CRITICAL: This slide must look like it belongs in the exact same presentation as the reference image - same colors, same glass treatment, same overall aesthetic.",
"style": "MATCH REFERENCE EXACTLY - Glassmorphism, visionOS aesthetic, same visual language",
"composition": "Asymmetric split: glass card left (40%), 3D visualization right (40%), breathing room between elements",
"color_palette": "EXACTLY match reference: purple #667eea, cyan #00d4ff gradient, same frosted white treatment, same text white",
"consistency_note": "CRITICAL: Must be visually identical in style to reference image. Same gradient colors, same glass blur intensity, same shadow treatment, same typography weight and style. Viewer should immediately recognize this as the same presentation."
}python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/nova-slide-02.json \
--reference-images ./outputs/nova-slide-01.jpg \
--output-file ./outputs/nova-slide-02.jpg \
--aspect-ratio 16:9Slides 3-5 - Continue the reference chaining:
Follow the same pattern for the remaining slides, always using the immediately preceding slide as the reference image (--reference-images ./outputs/nova-slide-02.jpg for slide 3, ./outputs/nova-slide-03.jpg for slide 4, and so on). Each prompt must emphasize matching the visual language established by slide 1.
# Slide 3 references slide 2
python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/nova-slide-03.json \
--reference-images ./outputs/nova-slide-02.jpg \
--output-file ./outputs/nova-slide-03.jpg \
--aspect-ratio 16:9
# Slide 4 references slide 3
python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/nova-slide-04.json \
--reference-images ./outputs/nova-slide-03.jpg \
--output-file ./outputs/nova-slide-04.jpg \
--aspect-ratio 16:9
# Slide 5 references slide 4
python ../image-generation/scripts/generate.py \
--prompt-file ./workspace/nova-slide-05.json \
--reference-images ./outputs/nova-slide-04.jpg \
--output-file ./outputs/nova-slide-05.jpg \
--aspect-ratio 16:9After all 5 slide images are generated, compose them into the final PPTX file:
python scripts/generate.py \
--plan-file ./workspace/ai-product-plan.json \
--slide-images ./outputs/nova-slide-01.jpg ./outputs/nova-slide-02.jpg ./outputs/nova-slide-03.jpg ./outputs/nova-slide-04.jpg ./outputs/nova-slide-05.jpg \
--output-file ./outputs/nova-ai-presentation.pptxThe final presentation nova-ai-presentation.pptx will be created in ./outputs/.
© peintune, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .codex/skills/ppt-generation of peintune/runjam.
Open the folder on GitHubat commit b186c61
Ppt Generation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ppt Generation this skillpeintune/runjam | 228 | — | ~7.1k | Automated safety check: Pass | MIT | |
| Slidesfcakyon/claude-codex-settings | 1.2k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Gpt Image2 PptJuneYaooo/gpt-image2-ppt-skills | 1.3k | — | ~8.9k | Automated safety check: Notes | Apache-2.0 | |
| Powerpoint SlidesNoi1r/powerpoint-skill | 123 | — | ~12k | Automated safety check: Notes | MIT | |
| PPTX HTML Fidelity Auditsanqiufong/slides-from-anything | 132 | 1 repos | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Ppt Image2 Editable Rebuildwwe-dog/ppt-image2-editable-rebuild | 200 | — | ~2.2k | Automated safety check: Pass | Unlicense |
fcakyon/claude-codex-settings
Create and edit presentation slide decks (.pptx) with PptxGenJS, bundled layout helpers, and render/validation utilities.
JuneYaooo/gpt-image2-ppt-skills
Generate visually striking PPT slides via OpenAI's gpt-image-2 -- use any style in styles/<collection/STYLEID.md or mimic a user-supplied .pptx template; outputs high-res slide PNGs and a 16:9 .pptx.
Noi1r/powerpoint-skill
Create visually rich PowerPoint (.pptx) presentations from academic papers, research notes, or any content the user wants in slide format.
sanqiufong/slides-from-anything
Audit a python-pptx export against its source HTML deck, identify layout/content drift (footer overflow, cropped content, missing italic/em, lost styling, off-rhythm spacing), and re-export with…
wwe-dog/ppt-image2-editable-rebuild
Create editable PowerPoint decks or pages from image2/imagegen reference PNGs while keeping text and structure editable.
ZhiweiWei-NAMI/PPT-Visual-Replica
Create and edit editable PowerPoint decks, recreate slides or infographics from reference images, and develop scientific talks, teaching slides, and thesis defenses by generating slide drafts with…
peintune/runjam
Render Mermaid diagrams as SVG or ASCII art using beautiful-mermaid.
peintune/runjam
A skill your agent uses when development work is complete and you need to prepare for merge.
peintune/runjam
Default constraints for every RunJam session. An agent skill from peintune/runjam.
peintune/runjam
A skill your agent uses when reviewing code for bugs, security issues, performance problems, or adherence to best practices.
peintune/runjam
A skill your agent uses when implementing any feature or bugfix, before writing implementation code.
peintune/runjam
A skill your agent uses for complex multi-step tasks. An agent skill from peintune/runjam.
Works with
Categories
A skill your agent uses when the user requests to generate, create, or make presentations (PPT/PPTX). Ppt Generation is an agent skill from peintune/runjam. Use this skill when the user requests to generate, create, or make presentations (PPT/PPTX).
Ppt Generation fits situations like: the user requests to generate; make presentations (PPT/PPTX).
Run `npx skills add peintune/runjam --skill ppt-generation -a claude-code`. Or copy the skill folder (.codex/skills/ppt-generation in peintune/runjam) into .claude/skills/ppt-generation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add peintune/runjam --skill ppt-generation -a codex`. Or copy the skill folder (.codex/skills/ppt-generation in peintune/runjam) into .agents/skills/ppt-generation in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add peintune/runjam --skill ppt-generation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ppt-generation, .gemini/skills/ppt-generation, .github/skills/ppt-generation and .opencode/skills/ppt-generation in your project.
Going by SKILL.md and its folder, Ppt Generation needs the command-line tools its instructions call (python and pip). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ppt Generation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.1k tokens (SKILL.md is roughly 29k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ppt Generation: Slides (fcakyon/claude-codex-settings, 1.2k stars), Gpt Image2 Ppt (JuneYaooo/gpt-image2-ppt-skills, 1.3k stars), Powerpoint Slides (Noi1r/powerpoint-skill, 123 stars) and PPTX HTML Fidelity Audit (sanqiufong/slides-from-anything, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
peintune (a GitHub user) maintains it in peintune/runjam, which has 228 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 5, 2026.
Source: peintune/runjam on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.