Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

PPT生成兼容性修复

v1.0.0

This skill should be used when generating PPT files with pptxgenjs (Node.js library). It provides a complete workflow for creating PowerPoint-compatible PPTX...

0· 77·0 current·0 all-time
byYao Dongcheng@yaodongcheng

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for yaodongcheng/pptxgenjs-compat.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "PPT生成兼容性修复" (yaodongcheng/pptxgenjs-compat) from ClawHub.
Skill page: https://clawhub.ai/yaodongcheng/pptxgenjs-compat
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install pptxgenjs-compat

ClawHub CLI

Package manager switcher

npx clawhub@latest install pptxgenjs-compat
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
Purpose & Capability
Name/description claim a post-processing workflow for pptxgenjs-generated PPTX files; the included Python fixer implements the described fixes (Content_Types, invalid fonts, dirty=, p14:modId, zero extents, empty elements). The requested capabilities (none) align with the stated purpose. Minor mismatch: SKILL.md states removing broken notes files and cleaning .rels, but the script actually excludes all files whose names contain 'notesSlide' or 'notesMaster' (removes them unconditionally), which may remove valid user notes.
!
Instruction Scope
SKILL.md instructs the agent/user to run python scripts and to post-process output; the script does exactly that and contains no network calls. However the runtime behavior is broader than the prose implies: the script unconditionally excludes (deletes) any archive members matching 'notesSlide' or 'notesMaster' rather than detecting and removing only broken ones, replaces certain theme font tokens with 'Microsoft YaHei' globally (which may be undesirable for non-CJK content), and will overwrite the input file in-place by default. Those actions can cause data loss or unexpected content changes and are not sufficiently emphasized in the instructions.
Install Mechanism
Instruction-only skill with a bundled Python script; no install spec, no external downloads, no additional packages required beyond Python standard library (zipfile, xml.etree, re, shutil). This is low install risk.
Credentials
No environment variables, no credentials, no external endpoints requested. The script runs locally on the provided PPTX file only.
Persistence & Privilege
The skill does not request persistent installation, 'always' is false, and it does not modify other skills or system-wide settings. It does, however, overwrite files in-place by default if an output path is not supplied — a functional risk but not a privilege escalation.
What to consider before installing
This skill appears to implement the advertised pptxgenjs fixes, but it has behaviors that could unexpectedly modify or destroy content: 1) The included Python script will, by default, overwrite the input PPTX if you don't supply an output path — always run it on a copy first. 2) The script unconditionally removes any files whose names contain 'notesSlide' or 'notesMaster' from the archive (it does not check whether they are actually broken) — if you rely on speaker notes, back them up. 3) The fixer replaces certain theme font tokens with 'Microsoft YaHei' globally; this may alter text appearance for non-CJK presentations. Recommendations before installing/using: run the script on sample/copied PPTX files to verify results, review the script source (scripts/fix_pptx_compatibility.py) and adapt the notes-removal logic if you need to preserve notes, and always provide an explicit output path to avoid accidental overwrites. If you want stronger guarantees, request a version that preserves notes by checking whether the notes files are actually referenced/broken rather than removing them unconditionally.

Like a lobster shell, security has layers — review code before you run it.

latestvk975f95cp6rvrr0qv308n96gdd84hf9v
77downloads
0stars
1versions
Updated 2w ago
v1.0.0
MIT-0

pptxgenjs Compatibility Skill

Generate PowerPoint-compatible PPTX files using pptxgenjs without triggering repair dialogs.

The Core Problem

pptxgenjs has 6 known defects (GitHub Issue #1449) that cause PowerPoint to show the "problem with content" repair dialog. The defects are baked into the library's XML generation and cannot be avoided at the JavaScript level. A mandatory post-processing step is required after every PPTX generation.

Workflow

Step 1: Generate PPTX with Safe API Patterns

When writing pptxgenjs code, follow these rules to minimize (but not eliminate) compatibility issues:

Forbidden APIs (will cause cross-version issues)

❌ shadow — generates complex OOXML effect chains unsupported in many PowerPoint versions
❌ transparency — inconsistent behavior across PowerPoint/WPS/LibreOffice versions
❌ String shape names like "oval", "roundedRectangle" — writes invalid prstGeom values

Safe Alternatives

✅ Use line borders instead of shadow for visual depth
✅ Use pre-mixed colors instead of transparency (calculate blended colors on dark backgrounds)
✅ Pre-render dimmed icon variants (dark PNG) instead of runtime image transparency
✅ Always use enum constants: pres.shapes.OVAL, pres.shapes.ROUNDED_RECTANGLE

Pre-mixed Color Calculation

To replace transparency on a dark background, calculate the blended color:

background #1A1A2E + white at 20% opacity → approximately #3A3A4E

For dimmed icons, render at design time with a dark color:

const iconDim = await iconToBase64Png(FaShield, "3A4450", 256);  // dark variant

Step 2: Post-Process with fix_pptx_compatibility.py

This step is MANDATORY. Even with perfect API usage, pptxgenjs generates invalid XML that must be fixed.

Run the bundled script:

python scripts/fix_pptx_compatibility.py <input.pptx> [output.pptx]

If output is omitted, the input file is overwritten in place.

The script fixes all 6 known defects:

  1. Phantom slideMaster overrides in [Content_Types].xml — the #1 cause of repair dialogs. pptxgenjs registers non-existent slideMaster2~N.xml for every slide
  2. Invalid theme font references — replaces +mn-lt, +mn-ea, +mn-cs, +mj-lt, +mj-ea, +mj-cs with Microsoft YaHei
  3. dirty= attribute — removes non-standard pptxgenjs attribute
  4. p14:modId elements — removes non-standard namespace elements
  5. Notes Slides/Masters — removes broken notes files and their relationship references
  6. Zero-extent shapes and empty elements — fixes cx="0" cy="0", <a:t></a:t>, <a:ln />

Step 3: Verify

Open the PPTX in PowerPoint to confirm no repair dialog appears. For automated verification, check:

  • All Override PartNames in [Content_Types].xml point to existing files
  • No +mn-lt style font references remain
  • No dirty= attributes remain
  • No p14: namespace prefixes remain in slide XMLs

Common Mistakes to Avoid (Lessons from Real Incidents)

  1. Don't assume shadow/transparency fixes are enough — The real root cause is usually phantom slideMaster overrides in Content_Types.xml, not visual effects
  2. Don't write validation scripts with max() fallback to 0 for -1 values — This causes false positives in element order checks
  3. Don't use single-line regex for XML that spans multiple lines — Use re.DOTALL flag
  4. Don't skip post-processing — Even if the PPTX looks fine in your version of PowerPoint, it may break in others
  5. Search for known issues FIRST — Before diagnosing compatibility problems from scratch, check GitHub Issues for the library

Reference

For the complete list of pptxgenjs defects with examples and fixes, see references/pptxgenjs-pitfalls.md.

Comments

Loading comments...