← PresentonCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Presenton
Snapshot Sep 30, 2026 · 23:15 UTC · version 1.0.2
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "presenton",
"description": "Create new slide presentations with Presenton and export them as editable PPTX, presentation PDF, or PNG slide images. Use when a user asks for a presentation, PowerPoint, slide deck, pitch deck, report deck, or presentation-file export, even when Presenton is not named. Do not use for generic PDFs or images unrelated to slides, text-only outlines, or editing an existing deck in place. Use a concrete design brief when provided; otherwise search Presenton designs, resolve assets, generate validated 1280x720 HTML, export the requested formats—or all three when none is specified—and return download and shareable-preview links.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 323
},
{
"relative_path": "references/api.md",
"size_in_bytes": 6863
},
{
"relative_path": "references/html-format.md",
"size_in_bytes": 8363
},
{
"relative_path": "scripts/presenton_artifacts.py",
"size_in_bytes": 21603
},
{
"relative_path": "scripts/validate_html.py",
"size_in_bytes": 8969
},
{
"relative_path": "tests/test_presenton_artifacts.py",
"size_in_bytes": 10544
}
],
"skill_md_contents": "---\nname: presenton\ndescription: \"Create new slide presentations with Presenton and export them as editable PPTX, presentation PDF, or PNG slide images. Use when a user asks for a presentation, PowerPoint, slide deck, pitch deck, report deck, or presentation-file export, even when Presenton is not named. Do not use for generic PDFs or images unrelated to slides, text-only outlines, or editing an existing deck in place. Use a concrete design brief when provided; otherwise search Presenton designs, resolve assets, generate validated 1280x720 HTML, export the requested formats—or all three when none is specified—and return download and shareable-preview links.\"\n---\n\n# Create PPTX, PDF, and PNG Files with Presenton\n\nUse Presenton's design search when a user-provided design brief is absent, then use its HTML exporter instead of constructing binary formats directly.\n\n## Operating constraints\n\n- Read [references/api.md](references/api.md) before making API calls and [references/html-format.md](references/html-format.md) before writing HTML.\n- Use the public `https://api.presenton.ai` endpoints through the provided helper; no API key or authorization header is required.\n- Create new presentations only. Do not activate for generic document PDFs, standalone images, text-only presentation outlines, or requests to edit an existing PPTX in place.\n- Never upload credentials, secrets, payment details, or confidential material to the public image endpoint. If a user-provided image may contain sensitive information, ask the user to sanitize it or explicitly confirm the public upload before continuing.\n- Follow the design-resolution, export, reporting, and cleanup workflow below. Print concise status updates throughout, including periodic heartbeats during long waits.\n- Treat every non-empty `message` in a successful design-search, export, or preview-creation response as user-facing. Relay it verbatim in the next commentary update and include it in the final response's `Notes`.\n\n## Creation workflow\n\n1. Determine the requested formats, title, audience, purpose, slide count, and content. If no format is named, export PPTX, PDF, and PNG. Make reasonable content assumptions when details are absent.\n2. Resolve the visual direction from the user prompt. A concrete design brief (palette, typography, layout, aesthetic, brand, imagery, or composition) is used directly and skips search. Otherwise search designs, ask the user to choose only when the options require a human preference, or select the best result automatically. Retain the searched design ID for export.\n3. Resolve slide assets before writing HTML:\n\n - For every user-provided image that will appear in the presentation, upload the file exactly once and retain the returned HTTPS URL. Reuse that URL wherever the image appears. Never embed image bytes, base64, or any `data:` URL in the HTML.\n\n ```bash\n python3 scripts/presenton_artifacts.py upload-image --file <image-path>\n ```\n\n - For every icon concept used in the presentation, search Presenton's icon endpoint and choose a returned HTTPS URL that matches the concept and visual weight. Use `--icon-type` to match the design. Do not draw, inline, or invent substitute icons with SVG, emoji, Unicode glyphs, icon fonts, or CSS shapes.\n\n ```bash\n python3 scripts/presenton_artifacts.py search-icons \\\n --query \"revenue growth\" \\\n --limit 5 \\\n --icon-type thin\n ```\n\n4. Translate the resolved brief into design rules, then create a private OS temporary directory with `presenton_artifacts.py create-temp` and write the complete HTML document from scratch at `<temporary-directory>/presentation.html`. Follow [references/html-format.md](references/html-format.md) for dimensions, Tailwind, charts, fonts, assets, and PPTX compatibility. Use the retained HTTPS image and icon URLs in `<img>` elements. Do not copy a reference presentation or store HTML in the workspace.\n5. Confirm the HTML reflects the resolved design, has direct 1280×720 slide children under `#presentation-slides-wrapper`, contains no `data:` URLs, and passes the preflight validator:\n\n ```bash\n python3 scripts/validate_html.py \"$presenton_temp_dir/presentation.html\"\n ```\n\n The validator also checks that custom fonts used by slide markup have a matching import in the document head.\n\n6. Export each requested format exactly once, separately. The endpoint accepts only one `format` per call. Add `--design-id` only when the visual brief came from a searched design; omit it for user-provided design briefs:\n\n ```bash\n presenton_temp_dir=$(python3 scripts/presenton_artifacts.py create-temp)\n # Generate fresh HTML at \"$presenton_temp_dir/presentation.html\", then export it.\n python3 scripts/presenton_artifacts.py export \\\n --html \"$presenton_temp_dir/presentation.html\" \\\n --format pptx \\\n --title \"Presentation title\" \\\n --json\n ```\n\n7. Capture the positive integer `id` and HTTP or HTTPS `url` from each JSON object printed by the helper. Return every `url` as a clickable download link. The helper writes any response `message` to stderr as `API message: ...`; retain every such message for user reporting. Do not download or save exported files locally.\n8. After every requested format for one presentation succeeds, create exactly one shareable preview using any one of that presentation's retained export creation IDs:\n\n ```bash\n python3 scripts/presenton_artifacts.py create-preview --id <creation-id>\n ```\n\n Capture the HTTP or HTTPS URL printed by the helper and return it as the presentation's clickable shareable-preview link. The preview link expires after 24 hours. When creating multiple distinct presentations, repeat this once for each presentation; do not create a separate preview for each format of the same presentation.\n9. After all requested exports and the preview link succeed, list the fonts from the exact final HTML before cleanup:\n\n ```bash\n python3 scripts/presenton_artifacts.py list-fonts \\\n --html \"$presenton_temp_dir/presentation.html\"\n ```\n\n Include the resulting font names in the final response, along with any web-font source URLs when present. State that the inventory applies to every requested PPTX, PDF, and PNG export from that HTML.\n10. Return the result using this format:\n\n ```text\n Presentation\n - Title: <title>\n - Formats: <requested formats, or PPTX, PDF, and PNG when none was specified>\n - Slides: <slide count>\n - Design/reference used: <user-provided design brief, or searched design title and id>\n - References/assets used: <source URLs, user-provided references, image sources, or \"None\">\n - Notes: <every API response message verbatim, followed by other useful details; or \"None\">\n\n Shareable preview\n - [View presentation](<preview_url>) — expires after 24 hours\n\n Fonts\n - <font name> — <source URL when applicable>\n\n Download URLs\n - PPTX: [Download](<url>)\n - PDF: [Download](<url>)\n - PNG: [Download](<url>)\n ```\n\n Include only requested formats in `Download URLs`; when no format was specified, include PPTX, PDF, and PNG. Do not invent references, font sources, or URLs; use `None` when there is nothing to report.\n\n11. In a `finally`-equivalent step that runs after success, exhausted retries, errors, or interruption, clean up the exact temporary directory:\n\n ```bash\n python3 scripts/presenton_artifacts.py cleanup-temp \\\n --path \"$presenton_temp_dir\"\n ```\n\n Keep the directory only while active retries or additional requested formats still need the same HTML. Do not rely on eventual OS cleanup, and never delete the OS temporary root or any directory not created by `create-temp`.\n\nUse the helper for design search:\n\n```bash\npython3 scripts/presenton_artifacts.py search-designs \\\n --query \"executive cybersecurity review, restrained dark blue, data-led\"\n```\n\nIf the helper cannot be used, follow the equivalent cURL contracts in [references/api.md](references/api.md).\n\n## Quality rules\n\n- Use the resolved visual direction consistently across all slides: palette, typography, spacing, imagery, and shape language.\n- When the resolved design names a font family, use that exact font family in the presentation; do not silently substitute another font.\n- Preserve recognizable details from the user-provided design brief or selected searched-design description; do not merely mention the design in notes or metadata.\n- Vary layouts to fit the content while preserving a coherent system.\n- Keep text readable at presentation distance and prevent all overflow.\n- Use uploaded HTTPS URLs for every user-provided image and searched HTTPS URLs for every icon. Never use `data:` URLs or base64 assets in HTML.\n- Keep text as HTML text for PPTX editability and use charts only for actual data visualizations.\n- Add one `data-speaker-note` attribute per slide only when notes are requested.\n- Export from the same final HTML for every requested format so the outputs match.\n\n## Failure handling\n\n- On `404`, confirm that the public v3 designs/export routes have been deployed; do not guess a legacy replacement route.\n- On `400` wrapper/slide errors, re-run the validator and compare the HTML with the structural contract in [references/html-format.md](references/html-format.md).\n- On `422`, correct the request shape or field limits.\n- On `502`, keep the HTML only while retrying. After retries finish, run `cleanup-temp` before reporting failure. Never copy it to persistent storage.\n- Do not claim success unless every requested export response contains a valid positive creation ID and HTTP or HTTPS URL, and every distinct presentation has a valid HTTP or HTTPS shareable-preview URL.\n"
}SHA-256: 3860f57ae13f41c2e850d502660f1f879dfbec66cd619daeec748801db2e7766