Image To Editable Ppt
ningzimu/image-to-editable-ppt-skill
Rebuild slide images, scanned or image-based PPT/PPTX files, and PDF decks into object-level editable PowerPoint (.pptx), preserving speaker notes when supplied.
PPT (.pptx/.ppt) 全量解析。覆盖:所有 slide 文本/表格/图表提取、嵌入图片 caption、纯图片 slide 渲染识别、数据标签提取。
$ npx skills add OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills ppt-analysis --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/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .claude/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .claude/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysisType 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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills ppt-analysis --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .agents/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .agents/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills ppt-analysis --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .cursor/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .cursor/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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/OpenSenseNova/SenseNova-Skills.git --path skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis--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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills ppt-analysis --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .gemini/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .gemini/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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 OpenSenseNova/SenseNova-Skills ppt-analysisInstalls 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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .github/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .github/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills ppt-analysis --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis .opencode/skills/ppt-analysis && 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-analysis" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis into .opencode/skills/ppt-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ppt-analysis", 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-analysisPPT (.pptx/.ppt) 全量解析。覆盖:所有 slide 文本/表格/图表提取、嵌入图片 caption、纯图片 slide 渲染识别、数据标签提取。
Ppt Analysis is an agent skill from OpenSenseNova/SenseNova-Skills. PPT (.pptx/.ppt) 全量解析。覆盖:所有 slide 文本/表格/图表提取、嵌入图片 caption、纯图片 slide 渲染识别、数据标签提取。
Its SKILL.md is about 2.8k 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 PowerPoint presentations and Slides and decks. It works with Microsoft PowerPoint. The repository describes itself as: Modular SenseNova skills for building AI-powered office assistants and productivity workflows. The licence is MIT.
Read from SKILL.md and the folder at commit 5abde96. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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 Analysis loads about 2.8k tokens when it runs. Until then it costs about 23 tokens; SKILL.md has 171 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 OpenSenseNova/SenseNova-Skills at commit 5abde96, republished under its MIT licence (© OpenSenseNova). 171 words, ~2,758 tokens.
.claude/skills/ppt-analysis/SKILL.md (or your agent's skills folder).from pptx import Presentation
from pptx.util import Inches
import os, subprocess, json
# python-pptx is available
# For .ppt (old binary format): convert via libreoffice
def load_pptx(path):
if path.lower().endswith('.ppt'):
import subprocess
out_dir = os.path.dirname(path)
subprocess.run(
['libreoffice', '--headless', '--convert-to', 'pptx', '--outdir', out_dir, path],
check=True, capture_output=True
)
path = path.rsplit('.', 1)[0] + '.pptx'
return Presentation(path), pathdef extract_all_slides_text(pptx_path):
"""
Extract text from every slide: text frames, tables, chart titles.
For slides with no extractable text, flag them for image captioning.
"""
prs, _ = load_pptx(pptx_path)
slides_data = []
for slide_num, slide in enumerate(prs.slides, start=1):
slide_texts = []
has_text = False
for shape in slide.shapes:
# Text frame (most common)
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
text = para.text.strip()
if text:
slide_texts.append(text)
has_text = True
# Table
if shape.has_table:
tbl = shape.table
for row in tbl.rows:
row_text = '\t'.join(cell.text.strip() for cell in row.cells)
if row_text.strip():
slide_texts.append(row_text)
has_text = True
# Chart title
if shape.shape_type == 3: # MSO_SHAPE_TYPE.CHART
try:
if shape.chart.has_title:
title = shape.chart.chart_title.text_frame.text
slide_texts.append(f"[Chart: {title}]")
has_text = True
except Exception:
pass
slides_data.append({
'slide': slide_num,
'text': '\n'.join(slide_texts),
'has_text': has_text,
'needs_caption': not has_text # flag image-only slides
})
print(f"Total slides: {len(slides_data)}")
image_only = sum(1 for s in slides_data if s['needs_caption'])
print(f"Slides with text: {len(slides_data) - image_only}, image-only: {image_only}")
return slides_dataimport pandas as pd
def extract_pptx_tables(pptx_path):
"""Extract all tables from all slides as DataFrames."""
prs, _ = load_pptx(pptx_path)
all_tables = []
for slide_num, slide in enumerate(prs.slides, start=1):
for shape in slide.shapes:
if not shape.has_table:
continue
tbl = shape.table
rows = []
for row in tbl.rows:
rows.append([cell.text.strip() for cell in row.cells])
if not rows:
continue
# Use first row as header
try:
df = pd.DataFrame(rows[1:], columns=rows[0])
except Exception:
df = pd.DataFrame(rows)
all_tables.append({'slide': slide_num, 'df': df})
print(f" Slide {slide_num}: table {df.shape[0]}r × {df.shape[1]}c")
print(df.head(3).to_string())
return all_tablespython-pptx can read Chart data when it's stored as embedded Excel data.
If that fails, fall back to captioning the slide image.
def extract_chart_data(pptx_path):
"""
Extract data series from Chart shapes.
Returns list of {slide, chart_title, series_name, categories, values}.
"""
prs, _ = load_pptx(pptx_path)
charts = []
for slide_num, slide in enumerate(prs.slides, start=1):
for shape in slide.shapes:
if shape.shape_type != 3: # not a chart
continue
try:
chart = shape.chart
title = chart.chart_title.text_frame.text if chart.has_title else f"Chart_S{slide_num}"
for plot in chart.plots:
for series in plot.series:
try:
categories = [str(pt.label) for pt in series.data_labels] if hasattr(series, 'data_labels') else []
values = [pt.value for pt in series.values] if hasattr(series, 'values') else []
# Alternative: use xChart data
if not values:
values = list(series.values)
except Exception as e:
values = []
categories = []
charts.append({
'slide': slide_num,
'chart_title': title,
'series': getattr(series, 'name', ''),
'categories': categories,
'values': values
})
except Exception as e:
print(f" Slide {slide_num}: chart extraction failed ({e}) — will use caption")
return chartsWhen a slide has no extractable text (pure image/screenshot slides):
import fitz # PyMuPDF can also render PPTX via LibreOffice conversion
CAPTION = "/path/to/skills/sn-da-image-caption/scripts/caption.py"
def caption_image_slides(pptx_path, slides_data, prompt=None):
"""
For slides flagged as 'needs_caption', render to PNG and caption.
Uses LibreOffice to convert PPTX to PDF first, then renders pages.
"""
image_slides = [s for s in slides_data if s['needs_caption']]
if not image_slides:
print("No image-only slides to caption.")
return slides_data
# Convert PPTX → PDF (preserves slide visuals)
out_dir = "/tmp"
r = subprocess.run(
['libreoffice', '--headless', '--convert-to', 'pdf', '--outdir', out_dir, pptx_path],
capture_output=True, text=True
)
pdf_name = os.path.basename(pptx_path).rsplit('.', 1)[0] + '.pdf'
pdf_path = os.path.join(out_dir, pdf_name)
if not os.path.exists(pdf_path):
print(f"LibreOffice conversion failed: {r.stderr[:200]}")
return slides_data
# Render each image-only slide
doc = fitz.open(pdf_path)
for s in image_slides:
page_idx = s['slide'] - 1 # 0-indexed
if page_idx >= len(doc):
continue
page = doc[page_idx]
mat = fitz.Matrix(150/72, 150/72)
pix = page.get_pixmap(matrix=mat)
img_path = f"/tmp/slide_{s['slide']}.png"
pix.save(img_path)
# Caption the slide image
cmd = ["python3", CAPTION, img_path, "--json"]
p = prompt or "提取幻灯片中所有文字、数值和表格内容,保持结构,Markdown格式输出。"
cmd += ["--prompt", p]
cr = subprocess.run(cmd, capture_output=True, text=True, timeout=90)
if cr.returncode == 0:
desc = json.loads(cr.stdout).get("description", "")
s['text'] = desc
s['needs_caption'] = False
print(f" Slide {s['slide']}: captioned ({len(desc)} chars)")
else:
print(f" Slide {s['slide']}: caption failed — {cr.stderr[:80]}")
doc.close()
return slides_datadef find_in_pptx(pptx_path, keyword, slides_data=None):
"""Find keyword across all slides (after text extraction + captioning)."""
if slides_data is None:
slides_data = extract_all_slides_text(pptx_path)
results = []
for s in slides_data:
if keyword in s.get('text', ''):
idx = s['text'].find(keyword)
context = s['text'][max(0, idx-100):idx+200]
results.append({'slide': s['slide'], 'context': context})
print(f"'{keyword}' found in {len(results)} slides: {[r['slide'] for r in results]}")
return resultsdef extract_timeline(pptx_path, date_pattern=r'\d{4}[年/\-]\d{1,2}'):
"""Extract date-tagged events from slide text."""
import re
slides_data = extract_all_slides_text(pptx_path)
events = []
for s in slides_data:
for line in s['text'].split('\n'):
if re.search(date_pattern, line):
events.append({'slide': s['slide'], 'event': line.strip()})
return eventsdef compute_ratio_from_pptx_table(pptx_path, numerator_col, denominator_col):
"""Example: compute ratio = col_A / col_B for all rows."""
tables = extract_pptx_tables(pptx_path)
for item in tables:
df = item['df']
# Try to find columns (flexible matching)
num_col = next((c for c in df.columns if numerator_col in c), None)
den_col = next((c for c in df.columns if denominator_col in c), None)
if num_col and den_col:
df[num_col] = pd.to_numeric(df[num_col].str.replace('人', '').str.strip(), errors='coerce')
df[den_col] = pd.to_numeric(df[den_col].str.replace('人', '').str.strip(), errors='coerce')
df['ratio'] = (df[num_col] / df[den_col] * 100).round(0).astype(str) + '%'
print(df[['slide' if 'slide' in df.columns else df.columns[0], num_col, den_col, 'ratio']].to_string())pptx_path = "/mnt/data/report.pptx"
# 1. Extract text from all slides
slides_data = extract_all_slides_text(pptx_path)
# 2. Caption image-only slides
slides_data = caption_image_slides(pptx_path, slides_data)
# 3. Combine all text for analysis
all_text = '\n\n'.join(
f"[Slide {s['slide']}]\n{s['text']}"
for s in slides_data if s.get('text')
)
# 4. Search or analyze
results = find_in_pptx(pptx_path, '录用占比', slides_data)
# 5. Extract tables if needed
tables = extract_pptx_tables(pptx_path)| Pitfall | Fix |
|---|---|
| Skip slides with no text → miss chart data | Flag needs_caption, render & caption (Method 4) |
shape.chart.plots[0].series fails → no data | Catch exception, fall back to captioning the slide |
| Table columns misread (企业名 vs 岗位名) | Print headers + first 3 rows before computing; verify column meaning |
| Only read first N slides | Always for slide in prs.slides — no index limit |
.ppt format → python-pptx can't open | Convert to .pptx via libreoffice first |
| PPT has overlapping text boxes → garbled order | Sort shapes by top-left position: sorted(slide.shapes, key=lambda s: (s.top, s.left)) |
© OpenSenseNova, 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 skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis of OpenSenseNova/SenseNova-Skills.
Open the folder on GitHubat commit 5abde96
Ppt Analysis 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 Analysis this skillOpenSenseNova/SenseNova-Skills | 5.7k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Image To Editable Pptningzimu/image-to-editable-ppt-skill | 2.8k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Slidesfcakyon/claude-codex-settings | 1.2k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Ppt Image FirstNyxTides/ppt-image-first | 1.2k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Gpt Image2 PptJuneYaooo/gpt-image2-ppt-skills | 1.3k | — | ~8.9k | Automated safety check: Notes | Apache-2.0 | |
| HTML Slide To PPTXmucsbr/ppt-agent-workflow-san | 643 | — | ~1.1k | Automated safety check: Pass | None |
ningzimu/image-to-editable-ppt-skill
Rebuild slide images, scanned or image-based PPT/PPTX files, and PDF decks into object-level editable PowerPoint (.pptx), preserving speaker notes when supplied.
fcakyon/claude-codex-settings
Create and edit presentation slide decks (.pptx) with PptxGenJS, bundled layout helpers, and render/validation utilities.
NyxTides/ppt-image-first
Build presentation plans for PPT / slides / decks through a conversation-first workflow, then propose multiple visual directions with preview images before writing deck specs.
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.
mucsbr/ppt-agent-workflow-san
Convert structured single-slide or small deck HTML files into editable PPTX slides with native text boxes, shapes, chips, arrows, and panels.
zsyggg/paper-craft-skills
将论文、技术文章或知识内容制作成高真实感的 AIGC 幻灯片。先做叙事结构和逐页视觉导演,再调用生图模型生成每一页 16:9 slide image,最后合成为 PPTX/PDF。适合论文汇报、组会、公开课、技术分享、商业化研究展示;当用户提到“论文PPT”“AI生成PPT”“不像AI的PPT”“高质感幻灯片”“逐页生图PPT”时使用。
OpenSenseNova/SenseNova-Skills
Opens the PPT Workbench web editor for an existing SenseNova HTML slide deck so you can preview, inspect and visually edit it without regenerating.
OpenSenseNova/SenseNova-Skills
Builds HTML stories where one continuous camera journey advances with page progress, using researched structure, AI stills, Seedance video clips and browser QA.
OpenSenseNova/SenseNova-Skills
Researches Chinese market, macro, trade, procurement, listed-company and regulatory information from free official sources that need no sign-up or API key.
OpenSenseNova/SenseNova-Skills
Fallback scripts for web search, image search and download, and image generation that PPT skills use only when the host agent lacks or fails its own tools.
OpenSenseNova/SenseNova-Skills
Turns an approved slide outline into a full-page image for every slide, one 16:9 PNG per page, and optionally packages the set into a PPTX.
OpenSenseNova/SenseNova-Skills
Entry point for SenseNova presentation generation: creates a task folder, picks depth, output format and design richness, and routes to the right PPT skill.
Works with
Categories
PPT (.pptx/.ppt) 全量解析。覆盖:所有 slide 文本/表格/图表提取、嵌入图片 caption、纯图片 slide 渲染识别、数据标签提取。. Ppt Analysis is an agent skill from OpenSenseNova/SenseNova-Skills.
Ppt Analysis fits situations like: tasks that involve PowerPoint presentations; tasks that involve Slides and decks.
Run `npx skills add OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a claude-code`. Or copy the skill folder (skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis in OpenSenseNova/SenseNova-Skills) into .claude/skills/ppt-analysis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add OpenSenseNova/SenseNova-Skills --skill ppt-analysis -a codex`. Or copy the skill folder (skills/sn-da-non-spreadsheet-analysis/capability/ppt-analysis in OpenSenseNova/SenseNova-Skills) into .agents/skills/ppt-analysis 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 OpenSenseNova/SenseNova-Skills --skill ppt-analysis -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-analysis, .gemini/skills/ppt-analysis, .github/skills/ppt-analysis and .opencode/skills/ppt-analysis in your project.
SKILL.md names no scripts, command-line tools or credentials: Ppt Analysis is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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 Analysis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k 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 Analysis: Image To Editable Ppt (ningzimu/image-to-editable-ppt-skill, 2.8k stars), Slides (fcakyon/claude-codex-settings, 1.2k stars), Ppt Image First (NyxTides/ppt-image-first, 1.2k stars) and Gpt Image2 Ppt (JuneYaooo/gpt-image2-ppt-skills, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
OpenSenseNova (a GitHub organization) maintains it in OpenSenseNova/SenseNova-Skills, which has 5,747 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on September 18, 2026.
Source: OpenSenseNova/SenseNova-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.