Dashi PPT
Dashi PPT generates static HTML horizontal-sliding PPTs. When using this Skill, first organize the user's natural language requirements into a JSON plan, then call the local project generator to output
and
.
Version
Before completing the user's request and preparing the final response, run:
bash
node <skill-root>/scripts/check_latest_version.mjs
If the script outputs content, append it to the end of the final response to remind the user to update; if there is no output or the check fails, remain silent and do not mention the version check.
Skill Directory
The directory where the current
is located is the Skill root directory, referred to as
below.
Built-in generator directory:
Render script:
<skill-root>/scripts/render_goal_deck.sh
Version check script:
<skill-root>/scripts/check_latest_version.mjs
Generation Principles
This Skill is a template orchestrator. The default goal is to quickly and stably apply user requirements to registered page components, outputting HTML PPTs that can be opened offline.
The default mode is "lock template and fill in copy": retain the original visuals, structure, quantity, visibility, emphasis, color scheme, chart type, and image slots of the selected page components, only replacing visible text content. Do not modify any non-copy props unless the user explicitly requests adjustments to page attributes.
Visual refinement is not done by default, nor is screenshot aesthetic judgment. Do not rework repeatedly due to ordinary line breaks or partial layout imperfections. Only enter the visual QA process when the user explicitly requests "visual refinement", "100% check", or "help me adjust until satisfied".
Usage Rules
- Node.js 20+ and npm are required to run the generator; the render script will install dependencies in the Skill's built-in directory during the first generation.
- Style selection question: The user-visible response must embed the Markdown image of
<skill-root>/assets/skill/theme-style-grid.png
, expand the absolute path first; this is the built-in style image for response display, and cannot be written into or any media field; list the currently available styles and a concise "suitable for/crowd", and do not only mention the style image in internal progress prompts.
- Confirm two things before starting: theme style, whether images/videos are needed. If the user does not clearly express and it is not an overall commission, ask first and wait for a reply, do not choose on behalf of the user; only choose on your own in environments where questions cannot be asked (scripts/batch processing), and list the selection and reasons in the delivery instructions.
- Commission mode: Only when the user explicitly commissions the whole ("you decide everything", "don't ask, just start"), select the theme, default HTML, default no image-gen, and explain the assumptions in the end. When the user only says content/copy is "random" or "self-drafted", only self-draft the content; do not change the given style, number of pages, media, etc., and ask first for the unmentioned items according to the previous rule.
- Non-interactive/one-time execution (cannot follow up): If no style is specified, select an accepted theme based on the content theme; if there is no real material and image generation is not possible, prioritize pages without media slots, do not use image-gen; explain all assumptions in the end.
- Deck language follows the user's communication language: For non-Chinese users, add at the top level of ; write all copy fields in the target language, and overwrite all default Chinese copy in the pages (including decorative fields like "Thank you for reading" on the ending page), no Chinese residue allowed. The editor interface language automatically follows the system language of the opener, and can be manually switched in the upper right corner, no need to handle during generation.
- Delivery format: Default is HTML; "generate PPT", "make a PPT", "create a PPT", "make ppt" mean PPT presentation form. Only deliver PPTX files when , , , , or "format/file type is PPT/PPTX" is explicitly specified.
- PPTX files: Still generate HTML first and start the local preview service, then call the local HTTP export service; finally only provide the PPTX file path or download result.
- Currently available styles: Neumorphism Style, Glowing Purple-Green Style, Light-Dark Code Style, Glass Candy Style, Chromatic Chart Style, Dark Atlas Style, Cool White Research Style, Black Gold Experimental Style, Deep Blue Magazine Style, Golden Index Style, High-Energy Growth Style, Soundwave Neon Style.
- Do not select for ordinary automatic selection; only use it when the user explicitly specifies, or when the content is strongly related to finance/investment indexes and inspect confirms it can be filled.
<!-- theme-choice-hints:start -->
- Neumorphism Style | Suitable for: Product Introduction / Corporate Reporting | Audience: Startup Teams / Product Managers
- Glowing Purple-Green Style | Suitable for: Tech Conferences / AI/Autonomous Driving/Robot Themes | Audience: Tech Company Founders / Technical Leaders
- Light-Dark Code Style | Suitable for: Technical Solutions / Developer Conferences | Audience: Engineers / Technical Managers
- Glass Candy Style | Suitable for: Youthful Brands / Consumer Products | Audience: Brand Teams / Designers
- Chromatic Chart Style | Suitable for: Data Reports / Market Analysis | Audience: Data Analysts / Consultants
- Dark Atlas Style | Suitable for: High-Density Data Display / Strategic Analysis | Audience: Strategy Teams / Investors
- Cool White Research Style | Suitable for: Research Reports / White Papers | Audience: Research Institutions / Consulting Teams
- Black Gold Experimental Style | Suitable for: High-End Launches / Brand Proposals | Audience: High-End Brands / Creative Directors
- Deep Blue Magazine Style | Suitable for: Brand Stories / Interviews | Audience: PR Teams / Media Editors
- Golden Index Style | Suitable for: Financial Data / Investment Reports | Audience: Investment Institutions / Financial Analysts
- High-Energy Growth Style | Suitable for: Growth Reviews / Business Plans | Audience: Entrepreneurs / Growth Teams
- Soundwave Neon Style | Suitable for: Music & Entertainment / Trend Events | Audience: Entertainment Brands / Event Planners
<!-- theme-choice-hints:end -->
- Do not use old tokens, old themes, old media slots, old style branches or old entrance animation controls.
- First use
npm --prefix <skill-root>/project run layout:query -- --theme <themePack> --role <role> --limit 8
to select pages; add , , or when media slots are needed. The candidate order is random each time, choose appropriate ones from them, do not only use the first item in the list.
- When fields are unclear, objects/arrays/count, images/media: first run
npm --prefix <skill-root>/project run inspect:layout -- --compact <layout...>
; when writing objects, arrays, quantity or image props: run , run props:safe -- --goal <file> --write
for the entire goal.
- When piping the JSON of / to the program for parsing, use
node <skill-root>/project/scripts/layout-query.mjs
/ node <skill-root>/project/scripts/inspect-layout.mjs
instead: will print a lifecycle banner before stdout, which pollutes the JSON.
- For long decks: first use
npm --prefix <skill-root>/project run goal:scaffold -- --title <title> --goal <goal> --theme <themePack> --pages <n> --chunk-size 5 --out output/<deck-name>/goal.json
to generate a unique layout skeleton and , then fill in props in sections according to .
- Copy length and array quantity: prioritize writing according to ,
fillPlan.arrays[].visibleCount
, fillPlan.arrays[].nestedArrays
; / fields only write short words, short sentences or numbers.
- For Html fields (such as / ), only use for line breaks and / for inline emphasis when writing copy; and other free HTML are prohibited; in theme defaults depends on theme CSS and is only a placeholder, do not copy it. will block free HTML.
- Visible array items must write real copy; the hidden tail items controlled by count/visibility can retain the placeholder "Please enter text".
- Element appearance animations use the native effects of the page components.
- Page transition animations can be adjusted in the preview control panel.
- The deck delivered to users does not display style/theme switching options by default; style switching is only retained on the internal debugging demo page. When the user explicitly requests to keep theme switching, write
preview: {"themeSwitcher": true}
at the top level of the goal.
- Do not write free HTML slides; each page delivered to users must write + . is only allowed to assist in page selection during the draft stage, and must be replaced with a specific before rendering.
- The first 5 pages to of each theme are cover candidates. Only select 1 page from the first 5 pages as the cover for a deck, do not use multiple cover pages at the same time; select body pages from page 6 onwards.
- Do not use duplicate page components in the same PPT: the final must be unique. Record the used when selecting pages, change to other candidates of the same theme for different content pages, do not reuse the same layout by modifying copy.
- The deck delivered to users cannot only write and rely on the page's default copy. Unless the user explicitly wants the default demo, every page's visible content must write copy corresponding to the user's theme.
- Prioritize writing only the copy fields exposed by / . When fields are objects or arrays, fill in the internal keys according to and . has expanded nested paths (such as , ), fill in directly according to the listed paths.
- For pages marked by , the body text is fixed by the component and props cannot be filled in: change to a layout that can fill in body text, or use it only when the user accepts its default body text. Fill the visible items of arrays according to
fillPlan.arrays[].visibleCount
; are decorative positions, do not fill in.
- Do not modify page metadata, component source code, className, CSS, style fields or default visual structure to complete content filling. Only fill in content and page attributes explicitly requested by the user within .
- It is allowed to use the top-level to overwrite visible text slots, but only for replacing text content. Do not start the browser to batch extract all page text slots in ordinary generation; only perform runtime slot extraction when the user explicitly requests "completely clear all template default copy/check visible copy page by page".
- Forbid reusing old or old HTML in . Create a new output directory and a new JSON plan for each request.
- Write the output directory in the current session working directory, do not write to
<skill-root>/project/output
.
- HTML delivery: Only provide as the preview address to the user (do not provide https or .local variants); the local HTTP service can export HTML/PDF/PPTX, local HTML or cannot export editable PPTX. Do not return . When generating in an Agent APP with a built-in browser (such as Codex), remind the user to open the address in the system browser before exporting PDF/PPTX.
- PPTX delivery: Call
/api/export-editable-pptx
; finally only provide the PPTX file path or download result.
- When there is no browser session, direct script call, or the preview export interface returns 403/5xx: use
npm run export:pptx -- <deck>/ppt <out.pptx>
(use for PDF) to directly generate the file instead, no need to start a browser session first.
- If default copy irrelevant to the user's theme appears in the output text, such as AI Capital / Investment & Financing / SoundWave / Key Metrics / Roadmap / End of Report, etc., rewrite the JSON and re-render, do not deliver.
Media Workflow
- Only write slots where
mediaSlots[].canPresetMedia: true
in media fields, write paths according to the slot's / ; only references relative media paths within the deck, and cannot reference temporary directories, external absolute paths, or remote URLs.
- First judge the intention for visual material tasks: if there are no images but visual materials are needed, first ask whether to reserve image slots; if there is no real material and image generation is not possible, prioritize pages without media slots. If the user provides a material library/material directory path, it is regarded as having the intention to use images: select at least 2 pages with media slots and fill in appropriate materials. If the material path is inaccessible, change to pages without media slots and inform the user in the delivery instructions, do not leave placeholder prompt text in the pages. When the user agrees to use / , use / when the user provides materials; when the user explicitly requests original visual images/image generation, use image-gen to generate images in the Codex environment and add ; ask the user first if image generation is not explicitly requested. / / only indicate page selection intention, unless the user explicitly chooses to reserve empty slots, write real media paths before delivery, do not deliver empty media slots or fake paths.
- For local images/videos provided by the user, first run
npm --prefix <skill-root>/project run media:stage -- <deck-output-dir-or-ppt-dir> <media-file...>
, use the returned path; AVIF will be converted to a browser-compatible format. Image-gen output also falls into the current deck directory first.
- After rendering, check each image/video referenced in the goal: exists and the HTML contains the file name; if missing, only supplement the final and re-run the check. Each image/video material can be used at most once; after materials are used up, leave media slots empty or change to pages without media slots; do not repeatedly fill the same material unless the user explicitly requests it.
- When needing image-gen to generate more than 2 independent images, use multiple subagents to generate in parallel, do not wait serially one by one; generate each image independently, do not use a single puzzle/material board and then split it. Subagents are only used for image generation, not for topic selection, copy writing, page selection or verification.
Workflow
- Refine user goals: , , , , number of pages, content focus and final product format. If the user does not specify the number of pages, default to about 10 pages, no less than 8 pages.
- Confirm . If the user does not specify, ask about the style first; after the user selects, generate a , such as
<theme>-<date>-<3 random words>
, to ensure random page selection is reproducible.
- Judge image intention: if there are no images but visual materials are needed, first ask whether to reserve image slots; if the user provides local materials, first run ; use image-gen when image generation is explicitly requested.
- Use to select candidates; use + for objects/arrays/count/image props.
- Each page only carries one main information role. Prioritize changing the layout for pages that cannot be safely overwritten, do not force it by modifying style fields.
- Write the JSON into
output/<deck-name>/goal.json
in the current working directory; before rendering, run npm --prefix <skill-root>/project run props:safe -- --goal output/<deck-name>/goal.json --write
and goal spec verification. Check the output after ; if the replacement is not approved, change it back and switch pages.
- After filling in your own data in chart pages, you must rewrite the insight/chart reading/conclusion copy fields in the page based on the new data, do not retain the default conclusion.
- Run the render script to output
output/<deck-name>/ppt/index.html
; the script will use the Skill's built-in generator, do not switch back to the external project directory.
- After rendering, check the material paths, supplement the final if missing.
- Confirm that the script has completed and verification.
- Run
node <skill-root>/scripts/check_latest_version.mjs
for silent version check.
- The render script will start a local HTTP preview service and output ; to specify a port, set before running the script (use ports in the 5200-5999 range, ports 4178/4300/4400 are reserved for users and cannot be used). Only use this preview service, do not replace it with static servers like or : static servers do not have export and auto-save interfaces. Editing under the preview service is automatically saved to the itself; local files opened with are not auto-saved, need to be exported before delivery.
- Reply according to the delivery format: only provide for HTML; after calling
/api/export-editable-pptx
for PPTX, only provide the file path or download result.
Rework and Browser Check
Rework only in the following cases: rendering failure,
failure,
failure, obvious template copy irrelevant to the user's theme appears in the output, or the user clearly points out that a page's content has problems.
Default maximum of 2 rounds of fixes. If it still fails, explain the blocking reason, do not continue unlimited attempts.
Do not open the browser, create a Chrome profile, or extract full text slots by default. Only perform a browser smoke check once when modifying the generator/preview template/export logic, when the user explicitly requests to check the page effect, or when there was a problem where props were overwritten by default values after running in the previous round.
The browser smoke check only confirms that the page can be opened, the number of pages is correct, and the first and last pages are not blank. Do not perform screenshot refinement by default, do not revise repeatedly due to ordinary line break issues.
Example command:
bash
<skill-root>/scripts/render_goal_deck.sh \
output/client-review/goal.json \
output/client-review/ppt/index.html
JSON Structure
json
{
"title": "US AI Funding Research",
"goal": "Report to the investment team on the structure of large US AI funding, capital flow and subsequent judgments from 2024 to 2026",
"audience": "Investment Team / Industry Research Team",
"owner": "Research Team",
"randomSeed": "ai-funding-20260609-a7k",
"pageCount": 8,
"themePack": "theme01",
"slides": [
{"layout": "theme01_page001", "props": {"kicker": "Funding Research · VOL.01", "titleTop": "US AI", "titleBottom": "Funding Research", "lead": "Analyze this round of AI funding cycle from the perspectives of capital volume, track structure and typical companies."}},
{"layout": "theme01_page006", "props": {"kicker": "Core Figures", "value": "970", "unit": "Billion USD", "sub": "US AI venture capital scale hit a record high in 2024."}},
{"layout": "theme01_page010", "props": {"kicker": "# Research Method", "title": "Horizontal-Vertical Analysis", "cn": "Identify funding changes through cross-analysis of time and track dimensions."}},
{"layout": "theme01_page030", "props": {"kicker": "# Typical Cases", "title": "Milestones · Funding Rhythm of Leading Companies"}},
{"layout": "theme01_page084", "props": {"kicker": "# Appendix", "title": "Data Sources and Research Notes"}}
]
}
If
is empty,
is only suitable for temporary draft preview. Before delivering to users, it must be changed to specific
+ corresponding
.
Page Roles
is only used for draft page selection, the final JSON must be converted to a specific
. See
references/layout-roles.md
for role descriptions; real candidates are subject to the output of
.
can only be selected from the first 5 pages of the current theme.
/
candidates are based on real
, not page title keywords. Dynamic background pages can use
as atmosphere pages or chapter pages.
You can directly specify a page:
json
{"layout": "theme01_page030", "props": {"title": "Typical Cases"}}
Delivery Capabilities
The generated preview page supports page turning, opening the sidebar to edit text, adjusting page props, replacing image/video media slots exposed by components, switching page transition animations, and exporting HTML/PDF/PPTX. The bottom of the page delivered to users does not display page number identifiers, page turning guides, dot navigation or index prompts.
Page Attribute Contract
Do not read
for ordinary generation. First use the candidate summary output by
. Only when a more detailed contract is needed, run
npm --prefix <skill-root>/project run inspect:layout -- --compact <layout...>
to view the page contract:
- : Copy/data fields that can be safely rewritten.
- : Copy length budget; / fields that are too long will be intercepted by the goal spec.
- : Internal shapes of / array fields; only use the keys listed here when writing object fields such as , , , .
- : Image/video writing fields, count key, default quantity and maximum quantity.
- : Binding between quantity parameters and array fields.
- For numeric fields in , fill in numbers according to : is a hint, real data can exceed it; must be followed; fill in a ratio of 0-1; for fixed-length nested arrays, fill in according to the index based on /, do not try to make mistakes.
- : Fields operable on the right panel, not a list of ordinary content filling; only use when the user explicitly requests to adjust page attributes. By default, only fill in , visible arrays and real media slots.
Verification
- Must run before rendering.
- Must run after output.
- Must run after output.
- Run after modifying the display demo.