بنقرة واحدة
sn-ppt-standard
// Standard-mode PPT pipeline. All LLM / VLM / T2I calls are wrapped in a single CLI entry (scripts/run_stage.py). The main agent's job is simple: emit ONE shell command per stage, never write loops, never write prompts.
// Standard-mode PPT pipeline. All LLM / VLM / T2I calls are wrapped in a single CLI entry (scripts/run_stage.py). The main agent's job is simple: emit ONE shell command per stage, never write loops, never write prompts.
| name | sn-ppt-standard |
| description | Standard-mode PPT pipeline. All LLM / VLM / T2I calls are wrapped in a single CLI entry (scripts/run_stage.py). The main agent's job is simple: emit ONE shell command per stage, never write loops, never write prompts. |
| metadata | {"project":"SenseNova-Skills","tier":1,"category":"scene","user_visible":false} |
| triggers | ["sn-ppt-standard"] |
This skill is self-contained — no dependency on sn-image-base for LLM/VLM (T2I still goes through sn-image-base). Every call through $SKILL_DIR/scripts/run_stage.py. Every subcommand is deterministic: one input set → one output artifact → one-line JSON status.
<deck_dir>/task_pack.json exists and ppt_mode == "standard"<deck_dir>/info_pack.json existsAny missing → stop and tell user to enter via /skill sn-ppt-entry.
gen-image fails, don't write a placeholder PNG — the HTML stage will redesign around the missing slot.run_stage.py is the only place that builds payloads.timing / logging / retry layers. The skill is intentionally thin.R="python3 $SKILL_DIR/scripts/run_stage.py"
D="<deck_dir>"
$R preflight --deck-dir $D # validate + stage assets
$R style --deck-dir $D # -> style_spec.json
$R outline --deck-dir $D # -> outline.json
$R asset-plan --deck-dir $D # -> asset_plan.json
# Per-item forms — one progress line per item:
$R gen-image --deck-dir $D --page N --slot SLOT_ID
$R page-html --deck-dir $D --page N
# Batch (concurrent) equivalents — default 4 workers. Each prints one summary
# JSON to stdout plus per-item status lines to stderr.
$R batch-gen-image --deck-dir $D [--concurrency 4]
$R batch-page-html --deck-dir $D [--concurrency 4]
$R export --deck-dir $D # -> <deck_id>.pptx
batch-gen-image serializes writes to asset_plan.json under a process-local lock so concurrent workers don't clobber each other.
page-html works (two LLM calls per page)prompts/page_html_rewrite.md converts the structured outline + style_spec + inherited content into a natural-language user prompt (content, layout, palette, inherited material).prompts/page_html.md is a hard-contract system prompt (document shell, image path format, ECharts rules, single-layer background, <span> wrapping rule, language lock). Receives the rewritten query as the user message and returns the final <!DOCTYPE html>...</html>.This split keeps converter-facing mechanical contracts (chart container id = chart_N, {renderer:'svg'}, __pptxChartsReady counter, allowed chart types, etc.) in the generator's system prompt — not buried in the natural-language query where they'd get smoothed out.
One JSON line to stdout:
{"status": "ok", "page_no": 3, "path": "images/page_003_hero.png"}
or on failure (exit code 1):
{"status": "failed", "error": "<reason>", "page_no": 3}
For gen-image failures: don't retry, don't substitute — the HTML stage will redesign around it.
| Stage | Example |
|---|---|
| After preflight | 已进入 sn-ppt-standard,共 N 页 |
| After style | [1] style_spec.json ✓ 主色 #2D5BFF |
| After outline | [2] outline.json ✓ 10 页 |
| After asset-plan | [3] asset_plan.json ✓ N 槽位 |
| Per gen-image | [图 5/14] page_003/hero ✓ or ... ✗ 服务端 502 |
| After all gen-image | 图片生成阶段完成:成功 12,失败 2 |
| Per page-html | [页 3/10] HTML ✓ |
| After export | PPTX ✓ (10/10 页) or PPTX 失败: ... |
Silence for more than ~30 seconds = a bug.
The script is stateless — re-run a subcommand and it'll overwrite its output artifact. Quick ls <deck_dir> decides what's left:
style_spec.json exists → skip styleoutline.json exists → skip outlineasset_plan.json exists → skip asset-plan (but any slot whose local_path is missing or status != "ok" still needs gen-image)pages/page_NNN.html exists → skip page-html for that page<deck_id>.pptx exists → skip exportscripts/resume_scan.py emits a JSON manifest summarizing all this.
Configured via .env at the repo root (or <repo>/skills/.env). model_client.py auto-loads both. Required:
SN_API_KEY for shared text/vision/image-generation auth, or per-kind overrides SN_CHAT_API_KEY / SN_TEXT_API_KEY / SN_VISION_API_KEY / SN_IMAGE_GEN_API_KEYSN_BASE_URL, SN_IMAGE_GEN_MODELOptional SN_CHAT_BASE_URL / SN_TEXT_BASE_URL / SN_VISION_BASE_URL, SN_CHAT_MODEL / SN_TEXT_MODEL / SN_VISION_MODEL, and SN_CHAT_TIMEOUT / SN_TEXT_TIMEOUT / SN_VISION_TIMEOUT override defaults.
Run python $SKILL_DIR/lib/model_client.py health to verify env before running the pipeline.
scripts/export_pptx/html_to_pptx.mjs is invoked with --force — skips built-in motif / real-photo gates (this skill doesn't use the motif protocol). PPTX still produces even if some slots are missing images.
If the headless browser (Playwright/Chromium) is unavailable, the export returns status: "skipped" with reason "headless_browser_unavailable". The PPTX file is absent — this is an expected degraded ending state. The HTML pages are the final deliverable.
🚫 DO NOT fall back to python-pptx, libreoffice, or any other converter. DO NOT attempt to install Chromium system dependencies manually. Simply report the skip and finish.
sn-image-base for LLM/VLM (only for T2I).Base-layer skill for the SenseNova-Skills project, providing low-level APIs for image generation, recognition (VLM), and text optimization (LLM). This skill does not preprocess inputs; it only calls backend services and returns results. This skill is not user-facing and is intended for upper-layer skills only.
Generates professional infographics with various layout types and visual styles. Analyzes content, recommends layout and style, and generates publication-ready infographics. Use when user asks to create "infographic", "信息图", "visual summary", or "可视化".
Creative-mode PPT pipeline. One full-page 16:9 PNG per slide. LLM / VLM calls go through sn-ppt-standard/lib/model_client.py (shared thin client). Text-to-image (the actual png rendering) goes through sn-image-base/scripts/sn_agent_runner.py. Expects task_pack.json + info_pack.json already written by sn-ppt-entry.
Environment diagnostic for the PPT family. Validates sn-image-base, API keys, Node runtime, and optional deps; interactively writes .env for required vars. Runs before sn-ppt-entry; does not modify sn-image-* skills.
Update SenseNova Skills (the sn-* bundle) inside an OpenClaw or hermes-agent install. ALWAYS use this skill when the user says any of: "update SenseNova skills", "update SN skills", "更新 sensenova skills", "更新 sn skills", "刷新 sn-*", "升级 sn-* skills", or names a specific sn-* skill to update (e.g. "更新 sn-ppt-standard", "refresh sn-image-base"). Default scope is the whole sn-* bundle; if the user names specific skills, update ONLY those.
Excel 数据分析多步编排器。覆盖:(1) 读取多 Sheet Excel 文件并统计行数,(2) 大文件检测(≥10k 行自动 Parquet 优化),(3) 数据清洗(缺失值、文本标准化、无效字符),(4) 条件筛选与分类提取,(5) 跨 Sheet 统计聚合,(6) 导出 Excel/CSV 并提供下载链接。覆盖从数据读取到报告生成全流程,按步骤编排 capability 子 skill。**遇到以下任一情况就主动使用本 skill,不要自行写几行 pandas 就回答**:①用户出现触发词:Excel 分析 / 表格分析 / 数据分析 / 数据清洗 / 数据统计 / 数据筛选 / 数据可视化 / 数据导出 / 汇总统计 / 透视表 / 分组统计 / 交叉分析 / 趋势分析 / 对比分析 / 异常值检测 / 去重 / 缺失值处理 / Excel 报告 / 生成报表 / analyze Excel / data analysis / data cleaning / pivot table;②用户上传或指定了 .xlsx / .xls / .csv 文件并要求分析、清洗、统计或可视化;③任务涉及多 Sheet 读取、条件筛选、分类汇总、图表生成中的任意一项;④用户要求导出带格式的 Excel 报告或下载链接。仅不用于:不涉及表格数据的纯文本处理、图片分析(使用 sn-da-image-caption)、单个公式计算的简单问答。