Communitygithub.com

Brian-LEE0/jp-consulting-pptx

Build Japanese-language PowerPoint decks (.pptx) in the style of Japanese consulting firms, without the tell-tale signs of AI-generated slides. Covers writing, layout, and polish.

What is jp-consulting-pptx?

This skill creates professional Japanese PowerPoint presentations (.pptx) that mimic the style of top Japanese consulting firms, deliberately avoiding common AI-generated slide artifacts. It addresses three key areas: writing style (formal vs. explanatory tone, action titles, removal of translation-like phrasing), layout (consistent grid, non-repeating patterns, proper spacing), and polish (correct fonts, color schemes, margins). The skill works on top of a base 'pptx' skill and uses a combination of JavaScript (pptxgenjs) and Python (python-pptx) scripts. It includes a custom library (jp_deck_lib.js) that enforces fixed layout zones, a linter (lint_jp_deck.py) that checks for errors in fonts, language tags, overflow, overlaps, and layout repetition, and a post-processing script (postprocess_jp.py) that fixes East Asian font issues. The workflow emphasizes a storyline-first approach, careful writing following detailed style guides, pattern selection per slide, and rigorous validation including rendering slides to images for visual inspection. It supports platforms that can run Node.js and Python 3, making it suitable for use with Claude Code, Cursor, or similar AI agent environments where the agent can execute these scripts.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Brian-LEE0/jp-consulting-pptx/tree/HEAD

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Japanese consulting-style PPTX

This skill adds a Japanese-specific layer on top of the pptx skill. If the pptx skill is available (claude.ai: /mnt/skills/public/pptx/SKILL.md), read it first for the pptxgenjs footguns and the QA commands (validate.py, soffice → pdftoppm). Everything below overrides or extends it. This skill's own scripts need only Node + pptxgenjs and Python 3 + python-pptx.

Why this exists

Japanese slides made by default pipelines look machine-made for three reasons, in this order of visibility:

  1. 文体 – です・ます explanations, hedges (〜と言えるでしょう), empty words (さまざまな/効率的に), translated syntax. Fixed with references/writing-style.md plus the linter.
  2. 配置 – centered titles, identical three-card rows, accent stripes, uneven gaps, titles that move between slides. Fixed with references/layout-and-patterns.md and fixed layout zones in the library.
  3. 仕上げ – pptxgenjs leaves the East Asian font empty, so PowerPoint renders Japanese in 游ゴシック Light; tags text en-US; ignores kinsoku. Fixed by scripts/postprocess_jp.py, run automatically by the library.

The cause of AI-sounding text is emptiness, not particular words. Banning a phrase makes the model substitute a synonym. So fix the cause: add specifics (who, what, how many, by when) or delete the sentence. writing-style.md §0 explains this; follow its three-pass rewrite (削る → 足す → 揃える).

Overrides of the pptx skill

pptx skill saysHere
Title 36–44pt, body 14–16ptTitle 24pt, lead 14, body 14, notes 10. Japanese consulting decks are read documents; long Japanese titles do not fit at 36pt. Use 18pt+ body only if the deck is projected.
Fonts from the safe listLatin/numerals Arial, Japanese BIZ UDPゴシック (alternatives: 游ゴシック, メイリオ). Set font: in createDeck. QA renders with a substitute font, so leave ~10% slack in boxes.
Every slide needs a visual elementA structured table, columns or process counts as visual. Avoid bullet-only slides; never add decorative icons to satisfy this.
No accent lines, no color barsSame here, and also no card edge stripes or full-width header bands.

Workflow

  1. Storyline first. Write the action titles for every slide as a list and read them in order. If the titles alone do not tell the story, fix the story before any layout (writing-style.md §2).
  2. Write copy per slide applying writing-style.md §1–§5: element-by-element register, no です・ます in titles or bullets, numbers with 基準 and 出所.
  3. Pick a pattern per slide from the table in layout-and-patterns.md §2. Neighbouring slides must not use the same pattern.
  4. Build with the library (below). Do not hand-place the title, lead, notes, or page number; the layouts own them.
  5. Lint: python3 scripts/lint_jp_deck.py deck.pptx. Fix every ERROR and read every WARN. Re-run until no ERROR remains.
  6. Validate and render: validate.py, then convert to images and inspect each slide (see beautify.md §4–§5). Look at slides with fresh eyes; check titles for orphan lines and blocks for gaps under 0.3in.
  7. Report the lint summary and any WARN you kept on purpose, with the reason.

If the user supplies existing Japanese slides to fix, run the linter first to get a defect list, then edit text per writing-style.md and keep their layout unless it violates the layout rules.

Library

const { createDeck } = require("<skill dir>/scripts/jp_deck_lib.js");
const d = createDeck({ font: "biz-ud", palette: "ink", title: "…", company: "…", footerText: "Confidential" });
const { L } = d;                                  // zones in inches: L.body, L.note, …
d.cover({ title, subtitle, meta });
const s = d.content({ title: "結論を言い切るタイトル", lead: "対象・条件", section: "章名" });
d.bullets(s, ["体言止めの行", { t: "補足", lv: 1 }], { x: L.body.x, y: L.body.y, w: 6, h: 3 });
d.barChart(s, { labels, series: [{ name, values }] }, rect, { hi: 0 });
d.table(s, rows, rect, { numCols: [1, 2], hlRow: 2 });
d.columns(s, [{ head, items, foot, hl }], rect);
d.chevrons(s, [{ head, items, out, hl }], rect);
d.takeaway(s, "示唆の一文");                      // bottom of body zone
d.note(s, ["出所:…", "注:…"]);
await d.finish("out.pptx");                       // writes, then runs postprocess_jp.py

scripts/sample_deck.js builds an 8-slide reference deck that uses every component; read it before writing a new build script. Color options for lines, tables, and charts need hex from d.THEME.colors; text and fills take scheme colors d.C.*. postprocess_jp.py fails loudly if a scheme color leaked into a hex-only option.

Do not call pres.addText with a custom fontFace; the theme fonts carry the Latin and Japanese pairing. A hard-coded font breaks the East Asian mapping.

Reference files

  • references/writing-style.md – register per element, action titles, the AI-smell catalog (NG → OK), numeric notation, bullet rules, rewrite passes, pre-flight checklist. Read before writing any slide text.
  • references/layout-and-patterns.md – zones and grid, content → pattern table, alignment principles, AI-looking layouts to avoid, chart and table conventions.
  • references/beautify.md – color system, type scale, shape rules, finishing checks, rendering caveats.

Linter

scripts/lint_jp_deck.py deck.pptx [--strict] [--json] [--ignore RULE …] reads the .pptx with python-pptx and reports ERROR / WARN / INFO per slide. Exit code 1 on any ERROR (or any WARN with --strict). It covers the ★ items in writing-style.md §3 plus fonts, language tags, overflow estimates, overlaps, tight gaps, margins, title position drift, centered body text, and layout repetition. It cannot judge whether a title is a good claim; do that by reading the titles in order.

Related Skills