/install corespeed-pptx
Corespeed PPTX — PowerPoint Generation with JSX
Generate professional .pptx files using TypeScript JSX via @pixel/pptx.
Workflow
- Write a
.tsxfile that exports adeckvariable - Run the generator to produce the
.pptx
Usage
deno run --allow-read --allow-write --config {baseDir}/scripts/deno.json {baseDir}/scripts/generate.ts slides.tsx output.pptx [--json]
- First arg: path to your
.tsxslide file (mustexport const deck = ...) - Second arg: output
.pptxfilename --json— structured JSON output for agent consumption
Writing Slides
Create a .tsx file. It must export a deck variable:
/** @jsxImportSource @pixel/pptx */
import { Align, clr, Presentation, Slide, Text, u } from "@pixel/pptx";
export const deck = (
\x3CPresentation title="My Deck">
\x3CSlide background={{ kind: "solid", color: clr.hex("F7F4EE") }}>
\x3CAlign x="center" y="center" w={u.in(8)} h={u.in(1.5)}>
\x3CText.P style={{ fontSize: u.font(32), bold: true }}>
Hello, World!
\x3C/Text.P>
\x3C/Align>
\x3C/Slide>
\x3C/Presentation>
);
Components
Layout
| Component | Purpose |
|---|---|
\x3CPresentation> |
Root container. Props: title, layout |
\x3CSlide> |
Single slide. Props: background, layout |
\x3CRow> |
Horizontal flex layout. Has \x3CRow.Start>, \x3CRow.End> |
\x3CColumn> |
Vertical flex layout. Has \x3CColumn.Start>, \x3CColumn.End> |
\x3CStack> |
Overlapping layers |
\x3CAlign x y w h> |
Center/align a single child |
\x3CPositioned x y w h> |
Absolute positioning |
Content
| Component | Purpose |
|---|---|
\x3CText> |
Multi-paragraph text body. Props: gap, style |
\x3CText.P> |
Single paragraph |
\x3CText.Span> |
Inline text run |
\x3CText.Bold>, \x3CText.Italic>, \x3CText.Underline> |
Inline formatting |
\x3CText.Link href="..."> |
Hyperlink |
\x3CShape preset="..."> |
Shape: rect, roundRect, ellipse, etc. |
\x3CImage src={bytes} w={...} h={...} /> |
Embed image (Uint8Array) |
\x3CTable cols=[...]> |
Table with \x3CTable.Row> and \x3CTable.Cell> |
Charts
| Component | Purpose |
|---|---|
\x3CChart.Bar data={[...]} category="key" series={[...]} /> |
Bar chart |
\x3CChart.Line data={[...]} category="key" series={[...]} /> |
Line chart |
\x3CChart.Pie data={[...]} category="key" series={[...]} /> |
Pie chart |
\x3CChart.Donut data={[...]} category="key" series={[...]} /> |
Donut chart |
Units & Colors
import { u, clr } from "@pixel/pptx";
u.in(1) // inches
u.cm(2.5) // centimeters
u.pt(12) // points
u.pct(50) // percentage
u.font(24) // font size (hundredths of a point)
clr.hex("1F4E79") // hex color (no #)
Styling
Style props are plain objects. Use style on any component:
const style = {
fill: { kind: "solid", color: clr.hex("1F4E79") },
fontSize: u.font(24),
fontColor: clr.hex("FFFFFF"),
bold: true,
italic: false,
align: "center",
verticalAlign: "middle",
padding: u.in(0.2),
shadow: {
color: clr.hex("000000"),
blur: u.emu(12000),
distance: u.emu(4000),
angle: 50,
alpha: u.pct(18),
},
bullet: { kind: "char", char: "•" },
};
Backgrounds support solid, linear-gradient, and image.
Example: Multi-Slide Deck
/** @jsxImportSource @pixel/pptx */
import {
Align, Chart, clr, Column, Presentation, Row, Shape, Slide,
Stack, Table, Text, u, type Style,
} from "@pixel/pptx";
const title: Style = {
fill: { kind: "solid", color: clr.hex("1F4E79") },
fontSize: u.font(28), fontColor: clr.hex("FFFFFF"), bold: true,
verticalAlign: "middle", padding: u.in(0.2),
};
export const deck = (
\x3CPresentation title="Q2 Report" layout={{ rowGap: u.in(0.3), columnGap: u.in(0.3) }}>
\x3CSlide background={{ kind: "solid", color: clr.hex("F7F4EE") }}>
\x3CColumn>
\x3CShape preset="roundRect" h={u.in(1.2)} style={title}>
\x3CText.P>Q2 Report\x3C/Text.P>
\x3C/Shape>
\x3CRow>
\x3CStack grow={1}>
\x3CShape preset="roundRect" style={{ fill: { kind: "solid", color: clr.hex("FFFFFF") } }} />
\x3CAlign x="center" y="center" w={u.in(4)} h={u.in(3)}>
\x3CChart.Bar
data={[
{ q: "Q1", rev: 8 }, { q: "Q2", rev: 12 },
{ q: "Q3", rev: 10 }, { q: "Q4", rev: 15 },
]}
category="q"
series={[{ name: "Revenue", value: "rev", color: clr.hex("2678B4") }]}
labels
/>
\x3C/Align>
\x3C/Stack>
\x3CTable cols={[u.in(1.5), u.in(1)]} grow={1}>
\x3CTable.Row height={u.in(0.4)}>
\x3CTable.Cell style={{ bold: true }}>Metric\x3C/Table.Cell>
\x3CTable.Cell style={{ bold: true }}>Value\x3C/Table.Cell>
\x3C/Table.Row>
\x3CTable.Row height={u.in(0.4)}>
\x3CTable.Cell>Revenue\x3C/Table.Cell>
\x3CTable.Cell>$1.2M\x3C/Table.Cell>
\x3C/Table.Row>
\x3C/Table>
\x3C/Row>
\x3C/Column>
\x3C/Slide>
\x3C/Presentation>
);
Notes
- No manual setup required. Deno auto-downloads
@pixel/pptxfrom JSR on first run. - The
.tsxfile mustexport const deck = ...(the JSX Presentation element). - Use
--jsonfor structured output:{"ok": true, "file": "...", "size": 1234} - Output opens in PowerPoint, Google Slides, LibreOffice Impress, and Keynote.
- Use timestamps in filenames:
yyyy-mm-dd-hh-mm-ss-name.pptx.
Support
Built by Corespeed. If you need help or run into issues:
- 💬 Discord: discord.gg/mAfhakVRnJ
- 🐦 X/Twitter: @CoreSpeed_io
- 🐙 GitHub: github.com/corespeed-io/skills
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install corespeed-pptx - After installation, invoke the skill by name or use
/corespeed-pptx - Provide required inputs per the skill's parameter spec and get structured output
What is Corespeed Pptx?
Generate professional PowerPoint (.pptx) presentations using JSX/TSX with Deno. Supports slides, text, shapes, tables, charts (bar, line, pie, donut), images... It is an AI Agent Skill for Claude Code / OpenClaw, with 176 downloads so far.
How do I install Corespeed Pptx?
Run "/install corespeed-pptx" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Corespeed Pptx free?
Yes, Corespeed Pptx is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Corespeed Pptx support?
Corespeed Pptx is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Corespeed Pptx?
It is built and maintained by claw-bot (@claw-bot); the current version is v0.0.1.