xorbitsai/xagent/presentation-generator
Claude Code and agent skill by xorbitsai/xagent
- community
Checking that the SKILL.md file is still in the repository.
Create, read, or edit PowerPoint .pptx files: slide decks from scratch, content extraction, templates, speaker notes, combining or splitting decks. Not for posters, images, or social graphics.
Install
npx vskill@latest install xorbitsai/xagent/presentation-generatorSKILL.md
Presentation Generator
Generate PowerPoint presentations using JavaScript code with the pptxgenjs library.
Google Slides output
When the requested output is Google Slides, this skill is the local deck creation step, not the final delivery step:
- Generate and inspect the designed local PPTX in the workspace.
- Call
google_slides_import_pptxwith that PPTX path to convert it into an
editable native Google Slides presentation. Treat validation_failed as a failed delivery; it means the conversion changed the slide count, dropped text, or left a blank slide.
- Call
google_slides_get_presentationto verify slide count and text before
returning the Google Slides link.
Do not build a new outlined deck with repeated google_slides_create_presentation and google_slides_add_slide calls. Those tools are for explicitly requested simple text/layout edits and do not preserve visual design.
For simple Google Slides layout edits, when google_slides_create_presentation returns a default_slide_id (it is null when there is no default page to replace), pass it to the first google_slides_add_slide call. Unless the user specified a different first slide, make that first slide the cover (layout="TITLE" with the deck title). Calls may run in separate MCP processes; without the id the connector only removes a sole page that has no elements at all, so a default page with placeholders stays as the first slide. google_slides_create_presentation writes the deck title into that page when it can, so it then reads as a title-only cover: do not add a second cover in that case. An empty page in a multi-page deck is preserved. Pass preserve_blank_slide=true when that sole page is intentional. google_slides_add_slide only supports layouts with title/body placeholders; use google_slides_batch_update directly for blank/custom slides.
When using google_slides_batch_update after google_slides_create_presentation, the connector cannot infer the default page across MCP processes. Include a deleteObject request for the returned default_slide_id, when one is returned, after creating the first content page, or use google_slides_add_slide with that ID.
⚠️ CRITICAL REQUIREMENTS - READ FIRST
YOU MUST FOLLOW THESE RULES - NO EXCEPTIONS:
- ONLY use the 4 predefined themes below (NOVA, ORBIT, PULSE, MINIMA)
- NEVER create custom color variables like
const colorAccent = "0078D7" - NEVER use hardcoded hex values in your code - always reference
theme.xxx - ALWAYS include the `#` prefix in hex colors (e.g.,
#EF4444notEF4444) - Slide 0 (first slide) MUST also be created via `const slide = pres.addSlide()` and use
theme.cover- first slide is the cover with dark/high-contrast background - Slides 1+ MUST use `theme.content` - all other slides use light/readable background
WRONG:
CORRECT:
Execution Rules
CRITICAL: MANDATORY constraints for stable presentation generation:
- USE PREDEFINED THEMES ONLY: You MUST use one of the 4 predefined themes (NOVA, ORBIT, PULSE, MINIMA) from the "Predefined Themes" section below. NEVER define custom colors or use hardcoded hex values like
"003366"orcolor: "FF0000".
- Theme Object Format: Always define theme as:
``javascript const theme = { background: '#XXXXXX', primary: '#XXXXXX', secondary: '#XXXXXX', accent: '#XXXXXX', text: '#XXXXXX' }; ` Then reference colors as theme.background, theme.primary`, etc.
- Slide Creation: ALWAYS call
pres.addSlide()before adding content to ANY slide, including the FIRST one. Capture its return value:const slide = pres.addSlide();then callslide.addText(...),slide.background = {...},slide.addImage(...), etc. Callingpres.addText(...)or settingpres.backgrounddirectly on the presentation object will throwpres.addText is not a function.
- Font Consistency: Keep font sizes consistent: titles 40-56pt, subtitles 24-32pt, body text 16-20pt
- Slide Bounds: Never position elements outside 10 x 7.5 inch slide area (x: 0-10, y: 0-7.5)
- Layout Simplicity: Prefer clean, simple layouts over dense or decorative designs
- Theme Selection: Choose theme based on presentation context (see Theme Selection Guide below)
- Visual Hierarchy: Slides must follow clear visual hierarchy: Title → Section Heading → Body → Accent Highlight. Avoid mixing too many font sizes on a single slide.
- Image Sizing: ALWAYS specify both width AND height, or use sizing to ensure images stay within bounds:
- Use
wandhtogether to control exact dimensions - Or use
sizing: { type: 'contain', w: 8, h: 5 }to fit within bounds while maintaining aspect ratio - NEVER use only
wor onlyhwithout the other - image may overflow - Keep images within content area: x: 0-10, y: 0-7.5 inches
- Handle Execution Failures Honestly:
execute_javascript_codereturns
{ success, output, error }. When success is false (or error is non-empty), the script aborted before writeFile and no .pptx was created. You MUST:
- Tell the user the generation failed and quote the
errormessage. - NOT claim the presentation was generated. NOT emit a
[name.pptx]()
link to a file that does not exist.
- Fix the JavaScript and retry (most failures are validation errors from
pptxgenjs — addTable row shape, missing slide handle, malformed options object — see "Data Table" below for the table pattern).
Layout Zones
For consistent slide layouts:
| Zone | X/Y Range | Purpose | |
|---|---|---|---|
| Safe content area | x: 0.5-9.5, y: 0.5-7 | Main content, images, data | |
| Title area | y: 0.5 - 1.5 | Slide titles and headings | |
| Content area | y: 1.5 - 5.5 | Main content, bullets, data | |
| Footer area | y: 6.0 - 7.0 | Footer text, page numbers, notes |
Note: Title slides may use vertically centered positioning (y ≈ 3). All other slides must follow layout zones.
Theme Selection Guide
| Context | Recommended Theme | Why | |
|---|---|---|---|
| Strategy / AI narrative / Investor deck | NOVA | Large titles, generous whitespace, authoritative feel | |
| Technical deep dive / Architecture / Dev | ORBIT | Dark background, strong contrast, clean technical aesthetic | |
| Metrics-heavy / Growth / Business performance | PULSE | Bold KPI emphasis, high-contrast numbers, data-focused | |
| Founder story / Brand / Minimalist | MINIMA | Extremely clean, typography-driven, minimal decoration |
Default: Use NOVA if context is unclear or not specified.
Predefined Themes
All presentations MUST use one of these themes.
Each theme has TWO variants:
- Cover (slide 0): Dark background, high visual impact, emotional
- Content (slides 1+): Light background, clean, readable
| Theme | Positioning | Cover Colors | Content Colors | Style | |
|---|---|---|---|---|---|
| NOVA (Default) | Strategy / AI / Investor | bg: #0A0F1C, title: #FFFFFF, accent: #7C3AED | bg: #F6F7FB, primary: #0A0F1C, accent: #7C3AED | Dark cover, light content | |
| ORBIT | Technical / Architecture / Dev | bg: #0B1220, title: #F1F5F9, accent: #22D3EE | bg: #0F172A, primary: #F1F5F9, accent: #22D3EE | Dark cover, lighter dark content | |
| PULSE | Metrics / Growth / Performance | bg: #111827, title: #FFFFFF, accent: #EF4444 | bg: #FFFFFF, primary: #111827, accent: #EF4444 | Dark cover, white content | |
| MINIMA | Founder / Brand / Minimalist | bg: #111111, title: #FFFFFF | bg: #FAFAFA, primary: #111111, accent: #000000 | Black cover, off-white content |
Color Reference Table
| Purpose | NOVA Cover | NOVA Content | ORBIT Cover | ORBIT Content | |
|---|---|---|---|---|---|
| Background | #0A0F1C | #F6F7FB | #0B1220 | #0F172A | |
| Title/Primary | #FFFFFF | #0A0F1C | #F1F5F9 | #F1F5F9 | |
| Subtitle/Secondary | #94A3B8 | #5B6475 | #94A3B8 | #94A3B8 | |
| Accent | #7C3AED | #7C3AED | #22D3EE | #22D3EE | |
| Text | - | #0A0F1C | - | #F1F5F9 |
| Purpose | PULSE Cover | PULSE Content | MINIMA Cover | MINIMA Content | |
|---|---|---|---|---|---|
| Background | #111827 | #FFFFFF | #111111 | #FAFAFA | |
| Title/Primary | #FFFFFF | #111827 | #FFFFFF | #111111 | |
| Subtitle/Secondary | #9CA3AF | #6B7280 | #999999 | #777777 | |
| Accent | #EF4444 | #EF4444 | #FFFFFF | #000000 | |
| Success | - | #10B981 | - | - | |
| Warning | - | #F59E0B | - | - | |
| Secondary | #5B6475 | #94A3B8 | #6B7280 | #777777 | |
| Accent | #7C3AED | #22D3EE | #EF4444 | #000000 | |
| Success | - | #34D399 | #10B981 | - | |
| Warning | - | - | #F59E0B | - | |
| Highlight | #22D3EE | - | - | - |
Theme Code Templates (Copy & Use)
IMPORTANT: Each theme has TWO variants - Cover (slide 0) and Content (slides 1+).
NOVA Theme (Strategy / AI / Investor):
ORBIT Theme (Technical / Architecture / Dev):
PULSE Theme (Metrics / Growth / Performance):
MINIMA Theme (Founder / Brand / Minimalist):
Usage Example:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsrc/xagent/skills/builtin/presentation-generator/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/xorbitsai/xagent/presentation-generator)