Repository navigation
Releases: liustack/pptwise
Release list
v0.48.0
Minor Changes
- c76d318:
pptwise buildno longer draws the deck in other themes on its first build. The theme is settled with the outline, so the other themes appear only when asked:--alternativesdraws the deck's cover and a page or two in up to three other themes, and later builds under the same theme keep them current.--no-alternativesworks as before. The DSH plugin'spptwise_buildpasses--alternativesforalternatives: true, and its result now tells the model to ask the user which theme they want. - 616c795:
pptwise asset-briefnow briefs every picture frame a deck holds, not onlyimagecomponents: each item of animage_grid, both sides of animage_compare, the screen of adevice_mockup, and each page's background picture, its own or the theme's default. Each item names itskind, thefieldthat names the picture, itsslotin a grid or comparison, and thecaptionor label set beside it. A full-slide background is noted as having the page's words set over it, and a device screen as wanting a real screenshot. A picture named in two frames on one page now reports each frame against its own component, still markedshared. - b89a3be:
pptwise brand scan [dir] [--json]finds what a project already says about its brand: logo files, pictures large enough for a slide, colors and fonts named in style sheets, Tailwind and design-token files and web manifests, and Office templates with their color scheme. It reports the brand color and second color the evidence points to, the--brandvalue for them, and readytheme try,theme forkandbrand extractlines. The scan is local and bounded: it never follows a symlink, skips hidden, dependency and build folders, never opens a file named like a secret, and stops at fixed limits it reports. - e0b0860:
pptwise build --sheetalso draws every page small into one numbered picture,sheet.jpg, named in the report aspreview.sheet, so an agent can look at the whole deck at once: whether the pictures fit their pages, where a page is empty, how the pages follow one another. It needs the optionalsharp. The DSH plugin'spptwise_buildtakessheet: trueand hands the picture to the model where the host and the model take images, and names the file otherwise. - 2df6b78: The DSH plugin settles the theme together with the outline.
pptwise_themesis called once the spec validates, before any page is written, and its result asks the user in the same message as the outline and the picture direction. It takesbrand, the brand colorspptwise brand scanfound, and then ends the wall with one more option: the first theme repainted in those colors, captioned in the card by its color swatches and the theme it repaints, with thetheme forkline that binds it. The plugin's instructions now run the brand scan while gathering materials, build withsheet: trueonce a build passes, and take the user's and the project's own pictures, pinned withimages add, before stock search. - 517c123:
pptwise images add <url|file> --deck <dir> --as <asset_id>pins a picture the stock search did not supply: a file of the project or the user's, or a picture found on the web. A picture from the web needs the license its own page states (--license cc0|pdm|cc-by[-<version>]|press|own), that page (--source), and, forcc-byandpress, its author (--author). Share-alike, non-commercial and no-derivatives pictures are refused. The sidecar records where the picture came from and its credit line, which the command prints. A PNG stays a PNG, an SVG is drawn into a PNG, and other formats become JPEG. - 53c88d2: The pptwise skill now runs clarify, gather materials, outline and theme, make, check, deliver. The user decides in two places only: one round of questions about the request, and the outline, theme and picture direction together in one message. Materials (facts with sources, the brand scan, and a picture plan per page) are written to
deck-dir/materials.md, which every later step reads, described in the newreferences/materials.md. The theme wall is drawn with the deck's own title before any page is written, with a brand option when the scan found brand colors, and the theme stays fixed while the deck is made. Pictures come from the user and project first, then stock, then the web under the licensesimages addtakes, then an enabled generator, andreferences/images.mdnow says how to set up each source. After the build passes, the agent looks at the whole deck in one sheet for pictures, holes and rhythm, at most two rounds, and delivers with a live preview address. - 88d7e27:
pptwise theme try --title <text> --brand <hex>[,<hex>]adds one more option to the theme wall: the first theme on it repainted in the brand's colors, the same repainttheme fork --brandwrites. Its row is<theme>-brandand carriesbaseandbrand, everythingtheme fork <base> --brandneeds to bind it. Nothing is bound.
Patch Changes
- b280942:
pptwise build --sheetnow writes each page number in a strip above its row instead of on a badge over the page's top left corner. The badge used to hide the section label, the crumb and the first characters of the heading, which are what a look at the sheet is for.images search --sheetkeeps its numbers on the photos. - b8c076e: The build's crowded-columns audit now also checks
kpi_cardsandnumbered_cardson ruled themes (proposal, thesis, swiss, memo), where their words stand on the paper under a hairline with no card ground between neighbours. Nothing in the gallery or the showcase decks is reported. - 4307b18: terminal's
logandspanrecipes now say what their figures must be: each value a length of time as a console prints it (2h52m,22h 06m), with no unit, icon, delta, tag, source or note on an item. A page with figures such as 「16 个月」 used to be told it had the recipe and only its words ran long, and no shortening could get it the drawing.inspectand the build report now name what to change. Recipes can say a field must be left out (!items[].unit|note). - b6a1fac: A recipe that asks for a number in a figure now counts a figure written as a JSON number (
"value": 16).inspectand the build report used to tell the author to write a number into a value that already held one. - 8c81269: Side-by-side steps and chevron bands keep their sentences a gutter apart. The sentences under
stepsused their whole slot 20px from the next one, and a brief page's sentences mixing Chinese with Latin names stood 26px apart at 16px and read across the page. Each sentence under a step, and each note under a chevron, now stops short of its neighbour by the gutter the two keep: a character and a quarter between Chinese, two characters where letters are in the line. The type keeps its size. The build's crowded-columns audit now checks both components. - ae60525: terminal draws a timeline beside plain figures as its incident log. A
processpage of a timeline and akpi_cardswhose values are not lengths of time (「16 个月」, 「4 位」) used to fall to the ordinary renderer, a horizontal timeline with its labels crowded into narrow cells. The log now sets those figures in the figure panels its board already uses beside the ranked bar chart: the label in mono, the figure in bold mono, the note under it, the marked figure on the mark's tint. Durations still draw to scale as before. - 0a9b989: A deck's theme name now resolves through the
themes/folders above the deck itself, wherever the command runs. Building, rendering or previewing a deck from another folder used to look up from that folder instead, so the same deck could pick up a different theme, or fail to find the one its own project holds.pptwise servewatches the same folders. Commands with no deck, such astheme new, still start from the working directory.
v0.47.0
Minor Changes
- 91bc9d5: The skill now plans at least one
photopage in every deck unless the user said not to show pictures, more when the material has places, products, people or work to show. A deck no longer ends up with no picture because its theme draws none on the cover: every factory theme draws aphotopage's picture, so the theme is still picked for the occasion, never for pictures.
Patch Changes
- 622677e:
asset-briefon a deck with noimagecomponent no longer printsno image components found for theme "<id>", which read as if the theme drew no pictures. It now says no page holds an image component yet, that the theme does not decide this, and thatimage_grid,image_compare,device_mockupand page backgrounds are not listed. Every factory theme draws aphotopage's picture.
v0.46.0
Minor Changes
- 441b150: The DSH plugin has a
pptwise_imagestool. It searches free stock photos and hands the model the hits numbered, with each one's description, plus the contact sheet of their thumbnails as an image it can look at, so the model picks a photo by sight before pinning it withimages fetch. Where the session's model takes no images, the result names the sheet's file instead. - d8e92e1:
images search --sheetdraws the results' thumbnails as one numbered picture,.pptwise/image-search/<query>.jpg(or the file you name), and prints its path. Look at that one image to pick a photo, then fetch the id with the same number. Results are numbered in the text and in--json(n), and--jsonnames the sheet assheet. A thumbnail that will not download is drawn from the full-size picture when there is one, else crossed out with a note. - b6a9911: The skill now gives a deck pictures without being asked: the cover, where its theme draws over a photograph, and every
photopage, other pages only where the picture is the point. The model reads the frame fromasset-brief, searches the free stock libraries, looks at the numbered contact sheet and pins the one that fits. It needs no key: with none set, search uses Openverse, and a Pexels or Pixabay key only improves the results. Say you want no pictures and it adds none.
Patch Changes
- fc8e940:
auditandbuildnow report icon cards whose words stand closer to the next card's than a gutter (a character and a quarter for Chinese, two characters for a line with Latin letters), as they already did for timeline milestones. People, product and quote cards and matrix cells are checked the same way on ruled themes, where they draw no card behind their words. - 3bbee96:
audit, and sobuild, now report anoverlapwhen the milestones of a timeline laid across the page stand less than two characters apart on one row. Their words then read as one line, and the area check could not see it, since the labels never touch. The build holds back the.pptxuntil it is fixed. - aeace06: A command run from inside a project's
.pptwise/folder, such as from a deck in.pptwise/decks/<name>/, now works for the project that holds that folder. Its output goes to the project's.pptwise/rather than a new.pptwise/nested under the deck,theme newwrites to the project'sthemes/, and the DSH plugin keeps its previews in the same place. - 60e6690:
.pptwise/is now kept out of git on the first build or preview even when it already existed because a deck was started inside it. Before, a folder created by writing a deck there was taken as one pptwise had set up already, and the deck, its pages and its.pptxall showed up ingit status. - 5825c93: A deck kept in
.pptwise/decks/<name>/now builds to.pptwise/<name>/instead of.pptwise/pptwise-decks-<name>/. No deck output takes the namesdecksorthemesany more, and a deck whose output folder would be another deck's sources is refused with a message that names the clash, instead of reading that deck's files and clearing its.pptx. - db856b7: The skill and the DSH plugin's tools now say where a new deck goes:
.pptwise/decks/<name>/in the project, with a short lowercase English name, unless the user names another place. A deck that already exists is edited where it is. Models no longer have to guess, and stop leaving new deck folders in the project's top level. - aa2f810:
icon_cardskeeps a clear gap between one column's words and the next. Columns used to set their titles and sentences a few pixels apart, so four cards across a page read as one line of text. Each line is now set in its column less a gutter of its own size: a character and a quarter for Chinese, two characters for a line with Latin letters in it. The type keeps the size it had and takes the gutter in an extra line where the row has the height, with a smaller icon if need be. A Chinese title that wraps breaks between words, and a title comes down only as far as its longest English word needs to stay whole. Type is set smaller only when the row is too short for those lines. - 9f10879: Picture downloads work behind a fake-ip proxy such as Clash or Surge. These proxies resolve every name into 198.18.0.0/15, which the download guard refused as reserved, so
images fetchand every--sheetthumbnail failed. That benchmark range is now allowed. Private, loopback, link-local, and the other reserved ranges are still refused. - 2639dc5:
images searchnow prints each photo's description from the stock library under its id: the Pexels alt text, the Pixabay tags, or the Openverse title. It tells what a picture shows before anyone opens the thumbnail. - f96bc8c:
images search --jsonprints the results as JSON: the query, every hit with the idimages fetchtakes, its size, description, author, license and attribution, and the notes that go with them. - 1acc663: A timeline laid across the page keeps two characters between one milestone's words and the next. The gap used to be 12px, so five milestones with a sentence each ran their descriptions together into what read as one line. Labels that already stood apart are drawn as before.
v0.45.1
Patch Changes
- 0317a2a: The other themes shown under a deck now look the way the deck would look after switching. A cover with something another theme has no place for, a footnote say, used to be left out of that theme's preview altogether, so some themes showed no cover at all. It is now drawn as switching draws it, with only that part left off.
- 3091bf3: The other themes a build shows under the deck now always show the deck as it is. They used to be drawn once, on the first build, and kept showing an old cover or old pages after you rewrote them. Every later build under the same theme shows them again, redrawn as soon as a page they show has changed, and once you switch to another theme they are gone.
- 93fb05c: A theme you named, or picked from a theme wall, is taken as your choice. The AI no longer explains why it chose it, and the deck no longer comes with other themes to switch to, on its first build or any later one. The same holds once you switch to one of the other themes it showed you.
- 8090ec1: In DeepSeek Harness, "switch to the second one" now goes straight to the theme numbered 2 under the deck. The AI is told the same numbers the card shows, on every build, so it no longer searches the project folder to work out which theme you meant.
v0.45.0
Minor Changes
-
2b7eece: The shared compositions gain an account setting, drawn on recap's 2026-10 board and read entirely from the theme's tokens. It draws the year in one line over three figures, target against actual by period beside a ledger with the period the gap closed in, a bridge from last year with the speaker's part subtotalled, a piece of work beside a photograph closing on its results, a year of the speaker's and the team's milestones on one axis, one figure moved with its before and after, the team's year in counts and people, a miss told as figures and four plain rows, a before and after table, next year's targets as dashed boxes beside this year's bars, the plan by quarter with what each must bring in, and the asks with an empty box for each choice of the page's
ballot. Who did what is a small legend read from each row'shighlight,toneandtag. A value with a currency in front of it (RMB 31m) now reads as a figure. -
78bd313:
pptwise buildnow shows the deck in other themes. On the first build of a deck bound to a built-in theme, it draws the deck's own cover and one or two of its content pages in up to three other themes from the shortlist for the bound theme's occasions and the deck's narrative strategy, writes them to.pptwise/<deck>/alternatives/, and lists them underalternativesin the report (theme id, display name, page files, and the time taken).--alternativesdraws them again and--no-alternativesskips them. The report also says where the bound theme came from, asthemeSource:builtin,fileorpack. -
53d207a:
pptwise buildnow says how many pages the theme's signature layouts drew, in one line, and gives each page its face drew plain the nearest recipe and what to change for it. They are hints and never block the build.--jsoncarries them undersignature. -
9585438: Decks live in the project. A deck target is always a path, a deck project directory or an IR file, resolved against the current directory. The bare deck name that looked under
~/.pptwise/decks/is gone, and so is thedecksDirsetting inpptwise.config.jsonand~/.pptwise/config.json. A config that still setsdecksDiris rejected with the key named. Move any deck you kept under~/.pptwise/decks/into the project you work in. -
91e8955: Delete the 99 faces no built-in theme's menu used. The registry now holds 107 faces: 22 covers, 22 chapters, 22 endings and 41 content faces (39 standard and the
image-splitandimage-toptakeovers). A page never named a face directly, so a deck on a built-in theme renders exactly as before.- Gone are the old shared pool (
poster-center,two-column,bento-panel,rail-numbered,narrow-column,quiet-frame,stacked-poster,image-bottom,image-annotate,quote-stageand the rest) and every theme's earlier faces that its 2026-08 and 2026-10 redesigns replaced (verdict-index,crayonbox-*,show-*,tone-adaptive-*,fashion-*and the rest). - A theme file whose menu names a deleted face is refused like any other unknown face. Point that entry at a face
pptwise layoutslists. - The engine-only
shape.coverknobs that only the deleted covers read are gone from the built-in themes. - The SDK's
extractBrandThemeno longer copies a fixed menu of these faces. It repaints a theme (bulletin by default, or the one passed asfrom) around the template's brand colors, the waypptwise brand extractdoes:
const { file, placement, fontNotes } = await extractBrandTheme(bytes, { id: "acme", label: "Acme", from: "swiss", });
- Gone are the old shared pool (
-
11bea98: The DSH build card now shows the deck in other themes when the build drew them: a numbered column per theme under the deck's pages, on the build card and on the deck card that stays under the turn once its steps fold (still there after later builds in that turn), the same way the theme wall draws them. Clicking one starts the message that asks for that theme ("Switch to Memo", 「换成 Memo」) in the composer, for the user to send or change.
pptwise_buildtells the model which themes are shown, not to stop for them, and that switching is settingthemeindeck.spec.jsonand building again. -
fc2d4b3: On DSH, the build card and the deck card under the turn now show how many pages use the theme's signature layouts.
pptwise_buildpasses on the nearest recipe for each page drawn plain, with the instruction to rewrite only where the content holds it. -
7def501: The DSH plugin keeps deck previews, theme walls and outlines in the session project's
.pptwise/previews/<id>/instead of~/.pptwise/previews/, and writes nothing in the home folder. A card's id now carries its project, so the card finds its preview from any later session while the project stays where it was. A call without a working directory puts the preview beside an absolute deck path, and refuses with a clear message when it has neither. Cards rendered before this release point at~/.pptwise/previews/, which the plugin no longer reads: they show the preview as not found, and the old folder stays untouched for you to keep or delete. The plugin no longer copies~/.pptpressor~/.pptfastinto~/.pptwise. A deck whose folder name would bepreviewsortheme-trynow lands in.pptwise/<name>-deck/. -
44e4dbe: A theme can name a figure font,
fonts.figure, for the large numbers on its pages. A theme that names none sets them in its heading font, as before. Bahnschrift, the DIN face Windows ships, joins the fonts slides can be set in, measured at its real widths, and a stack that names DIN Alternate first previews in it on a Mac. -
f2c62ae:
pptwise images generatenames a generator that a sandbox stopped from writing its own home folder (Operation not permitted,EPERM,EACCES,FS_PERMISSION_DENIED), and says to run the command outside the sandbox or allow that generator to write its home folder in the host, never to copy or move its login files. The skill says the same. -
d285220: Finding
~/.pptwiseno longer writes anything. The CLI used to copy a leftover~/.pptpressor~/.pptfastinto~/.pptwisethe first time any command looked for it, which failed every command in a sandbox whose home directory is read-only. The copy is gone. Move an old home by hand if you still need it.PPTPRESS_HOMEandPPTFAST_HOMEstill work as aliases. -
c88b239:
pptwise inspect <deck> --page <id>now lists the theme's signature layouts for the page: the drawings the theme's own samples are made of, the ones made for the page's kind first (or for the kind it lands on), each with how it looks and the recipe a page is written to for it, the components, item counts and fields it takes. A cover, chapter or ending whose face draws over a photograph lists that photograph. A written page is drawn and the layout that draws it now is marked, or the report says the face draws it plain.--jsoncarries the same facts undersignature. -
7e7e441: A deck now moves to another theme by changing
spec.themealone. A page whose kind the new theme does not offer is drawn by the nearest kind it does offer whose face takes the page's components (a fact page as data, then statement, a quote as statement, an evidence page as data or photo by its exhibit, a hierarchy as points), instead of failing validation. The page keeps its own kind, so a theme that offers it draws it there again.spec validateprints a note for each such page,build --jsonlists them underdrawnAs, andinspectandschema --kindshow the kind that draws the page. Theme furniture a face has no place for (kicker,stamp,tag,years,stage) is now left off with a warning and kept in the page file, whilefieldsandballotstill fail. A deck that froze its theme in its owntheme.jsonnow says how to switch instead of asking for the spec to be rewritten. -
920bc5f: Artifacts always go to
.pptwise/under the project root, the directory holdingpptwise.config.jsonor the current directory without one. TheoutDirsetting is gone, and a leftover.pptpress/or.pptfast/is no longer reused. Apptwise.config.jsonthat still setsoutDiris rejected with the key named.pptwise doctorstops reporting a configured output folder. -
470c39b: The skill no longer runs
pptwise packs syncat the start of every deck. Content packs are installed once at setup (license set, thenpacks sync), as the install guides now say, and again only when the license changes or the user asks for newer packs. Making a deck never writes the pptwise home folder, so the whole deck flow works in an agent sandbox whose home folder is read-only. The docs say which commands write~/.pptwise:config set,license set,license clearandpacks sync. -
70188ee: The shared compositions gain a portrait setting, drawn on profile's 2026-10 board and read entirely from the theme's tokens. It draws who the speaker is beside a photograph, the posts they held with one result each, what a role asks against what they have done with a verdict a row, a case from the problem through what changed to the result, figures beside a photograph, bars against a control group beside the result, a self-assessment as a radar beside a table of dots, the gaps and when each closes, the first days in phases on a ruler with the one the plan dwells on filled in the accent, and one sentence in the speaker's own words beside their portrait. A block filled with a brand colour too middling for white or dark words is moved just far enough that one of them reads.
-
eaafb74:
.pptwise/now keeps itself out of git from the inside. The first command that creates it writes.pptwise/.gitignoreholding*, beside the local exclude line it already added. In a sandbox where.gitcannot be written, the exclude line fails with a note and the folder still stays out ofgit status.--no-git-ignoreskips both, andpptwise doctorcounts the inner file as ignore...
v0.44.0
Minor Changes
- adba7ad:
pptwise brand extractkeeps the theme's own fonts.--brand-fontsputs the template's Latin heading and body fonts ahead of them, keeps the theme's Chinese faces, and warns when a template font is off the safe font list (the slides then use the next safe face) or has no exact width table (long lines may overflow). - ee02e5e:
pptwise theme fork --brand <hex>repaints a theme around a brand color, and--brand '<hex>,<hex>'adds the company's second color. The brand goes into the color the theme shows most as it is. A page-filling field takes it unchanged and the words on it switch to an ink that reads. A slot that writes the deck's headings keeps the theme's own color when the brand would not read there, and the brand goes to the rules and marks instead. A mark or chart series that does not stand off the ground moves its lightness just far enough, never gaining chroma, so dark themes get no neon. The other colors are drawn from the brand's own hue (a neighbour within 30 degrees when more shades are needed), the chart leads with the brand, and single-color charts stay single-colored. The theme keeps its own ground, text, surface and contrast floor.pptwise brand extractdoes the same with the template's accent1 and accent2.--primaryand the other anchor flags keep their literal meaning and cannot be combined with--brand.
Patch Changes
- ae002fa:
theme fork --brandandbrand extractno longer derive a shade that reads as another color: a light red that looks pink, a pale orange that looks peach, a dark orange that looks brown. Where no shade of the brand keeps its name, the theme's own grey or ink stands in, and marked words keep the theme's own emphasis ink. - 2ab8ee0:
brand extractwithout--fromnow repaints bulletin instead of brief. Across the brand colors we tested, bulletin is the business theme that keeps a brand color as given and on its face, while brief cannot set a bright brand color in its headings and leaves it to a short rule. Pass--from briefto keep the old choice. - 72e1637: A repainted theme fills bars, blocks, and chart series with the brand color exactly as given, and the words and values set on them take an ink that reads there. Only a slot that mostly draws rules, short lines, and small marks is still darkened or lightened to stand 3:1 off the page.
- f404114: A theme whose charts are one color among inks (swiss, ink, journal, memo, ledger, luxe, runway, stage) keeps them that way when a company names a second color: the second color goes only to the theme's marks outside the chart. The command now says where the second color actually went, or that it is not used.
- 37832d9: When a theme's pages work its main color into something else before painting it, such as homeroom darkening its primary into a blackboard, a brand that would no longer look like itself there goes to the theme's other colored slot instead, and the reworked field keeps the theme's own color. The command says so and names the color the field would have come out.
- 3fc14c0: The DSH cards' "Full screen" and "Open" buttons now read "Preview" (预览) with DSH's browse icon, since they open the deck in DSH's right sidebar, the same place DSH previews a presented file.
- 1ee9ddd: lecture's blackboard frame and chalk ledge take their wood from the theme's warning color instead of its accent, so a fork that repaints the accent changes the chalk and keeps the wood. lecture itself looks the same.
- 58405ac: Charts on the seal, panel and console faces now show a brand that leads a repainted palette. These faces draw their first series in the theme's mark and used to skip the palette's lead for the rest, so a fork that kept its own mark (vermilion with an orange brand) never drew the brand at all.
v0.43.0
Minor Changes
- 860ac1a: On DeepSeek Harness each finished turn that made a deck now ends with a draft card that stays open below the turn, Code Mode included: every page as a thumbnail, the page count and which version of the deck this is (one version per turn, however many times the turn rebuilt it), the pages changed since the last version marked, and buttons to view it full screen, download the .pptx, compare it with the last version side by side, or start a message about one page ("Page 3: " goes into the input box, ready to type). A turn that only drew an outline or a theme wall keeps that card below the turn instead. While pages are still being written, the build card says how many are done.
- 7e5ac0d: On DeepSeek Harness the pptwise cards now look like DeepSeek Harness's own cards and follow its light and dark themes, in the user's language. Full screen opens in the harness's right sidebar, which can widen to the whole window with its own button, and the keyboard is in the deck from the moment it opens: ←/→, PageUp/PageDown and Space turn pages, Home and End jump, Esc closes, the left and right edges of the page and the strip of pages below it are clickable, a sideways trackpad swipe turns a page, and "Page N of M" shows where you are. Clicking a page in the chat opens it on that page. The draft card marks a changed page with a small tag under it, and "Edit this page" appears when you point at a page. Comparing with the last version opens in the sidebar too.
- 0577494: On DeepSeek Harness a new
pptwise_outlinetool checks the deck's spec and shows its outline as a card in the conversation: one row per page with its number, page type, heading and what the page says. The skill calls it once the spec validates, before any page is written, and asks the user to confirm through the harness's own question panel unless they said to go ahead. Card words follow the language DSH is set to. - d4707c9:
pptwise spec validate --jsonprints the result as JSON: for a valid spec, the pages in order with their number, id, type, kind, heading and summary, plus the theme, narrative and warnings. For an invalid one, every error with its path, and exit code 1. An agent can now show the user the outline page by page straight from the checked spec. - d181907:
theme try --titlewith no theme ids now draws a shortlist of four to six themes: the ones whose occasions match--occasion(occasion words such asbusiness, or a narrative preset such asweekly-brief), filled from a spread of quiet to bold general themes. Before, the DSH theme wall drew all 22 themes when the model named none. A page that fails in every theme is now reported once instead of once per theme, and--jsoncarries these lines asnotes. On DSH,pptwise_themestakesoccasion, numbers the themes in its card in the order its result lists them so the question that follows can use the same numbers, and its description tells the model to leavepageout unless it is a page it already validated.
Patch Changes
- 2167c21: On DeepSeek Harness the skill's runtime note now names the plugin's own tools: the theme wall goes through
pptwise_themes, each build throughpptwise_build, and neither runs in the terminal, with the call shape for Code Mode spelled out. A model that ranbuildin bash left the user reading logs instead of seeing pages. When the plugin was upgraded while DSH kept running, the note now also tells the model to ask the user to restart DSH, since until then the old plugin code stays loaded and the new tools are not there. - 4c29a36: The skill now picks from the factory themes by default and creates a theme only when the user names brand colors or hands over a company template or deck. Asked for a "cool" deck, a model used to fork a factory theme into a new color set of its own, which skips the per-page tuning the factory themes carry. A wish for a look now puts fitting themes on the theme wall instead.
- 4cb2be8: The skill now makes listing the outline a step that is never skipped: before writing any page, the agent lists every page with its number, page type or kind, heading and what it says, even for a short deck and even when the user said to go ahead, in which case it lists the outline and carries on in the same reply.
- b03b585: The skill now tells the agent to write every message to the user in the language the user wrote in, progress notes and questions included, not only the deck copy. In a Chinese DSH conversation the model used to narrate its work in English and switch to Chinese only for the final answer.
- 9922e9c: The theme wall card on DeepSeek Harness numbers its columns 1, 2, 3 in the order the tool lists the themes, the same numbers the question panel's options start with, so "2" in the question is the second column in the card.
- be23b02: A deck can have the number of pages the user asked for.
spec validateused to reject a spec whose page count fell outside the range its pacing usually spans (dense 8 to 30, balanced 6 to 24, spacious 4 to 16), so a four-page weekly brief failed and agents added pages to get past it. The range is now a warning that says to keep a count the user gave. A one-page spec, which cannot hold both a cover and an ending, now says the shortest decks are two or three pages and to ask the user instead of adding pages. The skill says the spec has exactly the page count the user named.
v0.42.0
Minor Changes
- 4127e73: New
pptwise build <deck> [--json]runs assemble, validate, audit, preview and render in one pass. It reports every problem in one list, each with its page, the file and field to edit, and the check's own advice, and exits 1 while the deck needs revision. The pages are drawn whenever validate passes. The.pptxis written only when every check passes, at the same.pptwise/<deck>/<deck>.pptxpathrenderuses, and a build that does not pass removes the one an earlier build left there, so a deck has one final file and it always matches its sources. - 8f8268b: The DSH plugin adds two tools.
pptwise_themesdraws the user's own title as a cover, plus one content page, in every theme and shows them side by side in the conversation, so a theme is picked by looking rather than by reading names.pptwise_buildrunspptwise buildin the conversation's workspace, shows the drawn pages in the same card aspptwise_preview, and hands the model either the deck's one.pptxor each problem with its page, file and field. Both return small facts to the model and serve the pages to the card by id, so they work the same in Code Mode and in direct calls. A build that needs revision shows its pages without a download button. - e6c5d13: The skill now shows the user the theme and the outline before going on: a theme wall drawn with their own cover title (
pptwise_themes, ortheme try --titleoutside DSH) and the validated spec as a page list, previewed as soon as it exists. A user who says to go ahead is not asked, but still sees both. The agent checks its work throughpptwise build --json(orpptwise_build) after each batch instead of converting pages to images, and delivers only the one.pptxthat build wrote, throughpresenton DSH. - 0cbf0d8:
pptwise theme trycan draw your own deck instead of the fixed English sample. Pass--title(and optionally--subtitle,--lang zh|en, or--page <file>with one content page) and each named theme, orallof them, draws that cover and one content page. Every page is written as its own SVG next tomanifest.jsonand the contact sheet, so an agent or a chat host can show the pages directly. A page a theme cannot draw, such as a title its cover would cut, is left out of that theme with validate's reason. Without--titlethe command works as before. - 7d25a42:
pptwise themes --jsonnow lists each theme's menu: the face its cover, chapter and ending use, and the face of every content kind it offers undercontent. A kind a theme does not offer is absent, so an agent can tell whether a theme serves a page before it writes the spec.
v0.41.0
Minor Changes
-
6bab867: Almanac has a new look, a long-run yearbook. Every content page except
statementusesyearbook-sheet: the page'skickerbeside a sprout at the top left, a strip of years at the top right that lights the page'syears, the point in bold over a hairline, the source small at the foot, and the body drawn in theyearbooksetting. A page'stag(what the whole page rests on) is set where its composition places it, or over the body. The cover usesyearbook-cover: the page's photograph squared on the right, contour lines under the office and occasion, the title, a short rule in the accent and a scale of years from the page'stimeline. The ending usesyearbook-ending: the photograph under a scrim from the left and each decision on its own card, the marked one in the accent. When the deck asks for a footer, the motif prints the office at the left and 「N / M」 at the right. If you copied almanac into your own theme file, its menu still names the old faces and keeps working as before. -
1907b12:
pptwise auditnow reports any text on a page that still prints an emphasis mark as asterisks, ascontent-droppedwith kindemphasis, and exits with code 1. Before, a component that did not read**…**printed the asterisks and nothing said so. -
307ed98:
pptwise audithas a newstepped-asidefinding. It names every page the theme's layout could not hold, which a plainer layout drew whole but with a heading that does not match the rest of the deck, and it makes the audit exit with code 1.pptwise inspect --fitalready said so for one page at a time. -
89573fd: A page's
ballotcan give one item boxes of its own (item_choices), such as a pick among three ways to pay beside items voted for or against. A face that sets every item's boxes in shared columns (clinic's ballot ending) declares such a ballot dropped, and the quiz and request compositions leave it to the face, so validate says where it is drawn. -
1226512: The shared compositions gain a binder setting, drawn on proposal's 2026-10 board and read entirely from the theme's tokens. It draws what the client gets as a verdict over its figures, a day's tariff hours in named steps with the hours that matter framed, places side by side as cards, a sum worked line by line down to its answer, a run of bars against a reference with the levers beside it, a formula over two charge cycles a day, what changed from before to now, the parts of a plan with an unsettled basis dashed, ways to pay side by side, public precedents in a table, safety lessons beside who answers for what, a risk register with each remedy, the steps to delivery as a chain, a priced quote with its blanks left to fill, and the papers the client hands over as a checklist.
-
aec759d: A
data_table, acomparisonand atimelinetake an optionaltitle, the name a report gives a table ("Free cash flow"). It prints over the block in bold, and a theme that sets the block in a panel prints it in the panel's title bar. A hand-set table or timeline with no place for a title leaves the page to the ordinary block, which prints it. -
243c90c:
validatenow refuses a cover, chapter or ending heading the bound face would cut or drop, and says how long a heading that face holds on the page, in Chinese characters or in words. Such a heading used to export with its end cut off, or stop the export with no word of the limit. Two luxe faces, the invitation cover and chapter, also cut an over-long title with no mark at all, and now refuse the page instead. -
aca1276:
validatenow refuses a cover, chapter or ending subheading the bound face would cut or leave off, and quotes how much of it the face holds on that page. Such a subheading used to pass validate and only show up later as a cut line in the audit or a refused export. The check draws the page with its face, so the room it reports moves with whatever else the page carries. -
22d9b66: Brief has a new look. The corner mark in the top left is gone. Content pages now open with a navy heading over a fine rule, and with
branding: "full"they close with a footer that names the organization and the confidentiality. The cover, statement, chapter and ending pages are redrawn. Points, list, comparison, process, data and hierarchy pages use the newgauge-sheetface, which chooses a layout from the page's content. Evidence pages usegauge-exhibitand fact pages usegauge-figure. If you copied brief into your own theme file, its menu still names the old faces and keeps working as before.Authors can now mark the one thing a page is about:
emphasison a run of waterfall bars, with an optionalemphasis_labeldrawn as a bracket over thememphasison one chart seriesrecommendedon a comparison columnemphasison one roadmap item
The marked item takes the theme's highlight and the rest steps back. Comparison cells now read
**…**as emphasis instead of printing the asterisks.When every level of a waterfall sits well above zero, the axis now starts from a round floor below the lowest level, and break marks on the total bars show that the axis is cut. The small steps between the totals are now readable.
-
479019d: Pages that sit a chart, a row of figures, a timeline or a table next to a takeaway now lay out as designed in brief instead of falling back to a grey note box:
- A chart followed by
kpi_cardsputs the figures in a column beside the chart, with an optionalcalloutas the conclusion or ablockquoteas a quote. A chart on its own still derives its column from the data. kpi_cardsitems take anoteline under the value.- Two to four figures followed by a
blockquoteset the figures in a row and the quote below, with itsattribution. - A
timeline,comparison(now up to four columns) orrowspage followed by acalloutcloses with a full-width block in the theme's primary colour. - A fact page's
kpi_cardscan carry one or two supporting figures beside the hero figure.
Every face now draws the page's
footnote. Photo pages and several statement, pull-quote and two-column faces used to drop it without a word, andauditnow reports a source line that a page leaves out. Headings no longer count**marks toward their length, and**…**in a blockquote is drawn as emphasis instead of printing the asterisks. - A chart followed by
-
a9efcc5: Bulletin now offers
statement,factandevidencepages, which it used to refuse. A statement usesnotice-statement: no claim header, the sentence itself set large and bold where the header would be, over a short IKB bar, with the paragraph that backs it under a hairline. A fact usesnotice-figure: the usual claim header, then one figure as large as the page allows in IKB with its unit small after it, the line that says what it counts above it, and the two or three figures it is read against under a hairline. Evidence usesnotice-exhibit: the usual claim header, then one chart or table on a white card numbered across the deck (「图 1」, 「表 1」, "Exhibit 1"), an IKB ring round the bar group you marked withdata[].emphasisor the row you markedhighlight, and your reading beside it, numbered to the ring, with up to three notes. A page these faces cannot set whole goes to the ordinary notice sheet. The shared compositions behind them,sentence,billboardandproof, work in thenoticesetting, so any face that sets its pages that way can offer them. -
0ddb07f: Bulletin has a new look. The cover and ending are a full IKB page with a large white title and white steps. Every content page now opens with one quiet header, a black bold claim over a grey hairline with a short IKB bar, in place of the IKB title band and the ruler, and IKB is kept for the one thing each page marks. Points, list, comparison, process, data and hierarchy pages use the new
notice-sheetface, which sets the page from its content: numbered rows with the answer reversed out, a chart or bridge beside its figures, a horizontal bar chart, an open records table with a warning, figures beside a titled list, a calendar window over facts, a two-lane timeline, or an options table. Photo pages use thenoticecolumn ofimage-split. On bulletin, a waterfall or a gantt may share its page with akpi_cards. If you copied bulletin into your own theme file, its menu still names the old faces and they keep working, whilebulletin-motifnow draws only the steps. -
3153104: A callout can carry a
title, a short bold line over its text naming what the note is about (such as 谁付 or Who pays), and atag, a few words under its text that say what the note rests on (such as 企业口径 · 据报道, with abasisor anevidencekind). The ordinary callout draws both inside its panel and declares a tag wider than its text dropped. The shared hand-set compositions leave such a page to the ordinary callout. -
3fa3b01: The shared compositions gain a
chalkboardsetting: a night class at a green board, words in chalk white, what is quieter in a wiped chalk grey, and one stroke of yellow chalk drawn by hand under the thing to remember. Sixteen compositions come with it:agenda(what tonight covers in boxes of chalk),confluence(two paths meeting in one result beside a photograph, from aconcept_equation),braces(a formula with a brace under each term its "term:note" bullets explain),boughs(a decision tree in chalk with the recommended answer ringed),factors(things beside their factors, written after a multiplication sign insub),subtractions(what is taken off as a row of minus signs),flashcards(two rows of cards, the tagged ones ringed),risers(a rate table as a staircase),givens(an example's givens beside its photographs),derivation(a sum worked line by line with its equals signs in a column),cascade(a waterfall as chalk bars, the marked step dashed in yellow),exercises(questions lettered in rings with a line to answer on), `solu...
v0.40.0
Minor Changes
-
7de5a42: Chart value axes now always hold what they draw. A
barchart whose values are all the same, or all below zero, keeps zero on its axis, so a single bar no longer hangs below the x-axis. Values that differ only in their last few digits get distinct ticks that reach every value, and tick labels print the digits each tick has, so two neighbouring ticks never read the same (a step of 0.000001 used to print every tick as 1). A value past 1e300 on any chart's value axis, which used to stop the page with an error or draw points at NaN, is refused by validate with the same advice stacked and combo charts already gave: divide every series on that axis by one power of ten and name the unit.Bar values are printed together or not at all, the rule stacked totals already follow. When every value fits beside its bar, clear of the bars and inside the chart, all are printed as before. When they do not, none is printed and the export stops on that page until the numbers are shorter or the chart has fewer bars, where a crowded chart used to print its values on top of its bars and past its edges.
Long names are shown whole where there is room. A horizontal bar chart's name column grows with its longest category name, up to about a third of the chart, and the chart grows taller with its category count, so each category keeps a row. A donut's centre caption and a waterfall's category names wrap onto a second line instead of being cut. Charts whose names and numbers already fit render exactly as before.
Patch Changes
-
7266230: Chinese text no longer ends a paragraph on a single character. Where a card note, a bullet or a node label used to wrap as 植物染批次色差需沟通成 over 本, one more character now comes down with it, and a four-character label splits two and two. Line counts and line widths stay within what the box allowed before. A cycle node whose three-character label cannot be split that way widens into a capsule and keeps the label on one line.
Georgia body text is measured by the font's own letter widths instead of averages that ran about 20% wide, so a note that fits one line stays on one line (the timeline's and chevron band's last notes in the brief theme). Two chevron notes that share a baseline now keep at least 24px between them, and a decision tree steps its connector back when a condition such as 100% needs more room than half the gap gives. The
chevron_processschema now says a note may take two lines, which is what the drawing has always given it.A row of icon cards now tops every column at one line, so icons and titles align when the bodies differ in length. Numbered cards keep at least 8px between a card's edge and its words, and a staircase's lowest step keeps the same room under its number as beside it.
-
5a3fcb5: Sixteen components and one face now keep ordinary-length English and mixed-language text whole in narrow columns instead of cutting it at the end of a line. Chevron process notes, five forces items, hub and spoke descriptions, KPI card and progress donut sources, matrix cell titles, sankey node labels, swimlane lane names and step descriptions wrap onto further lines, and the drawing grows to hold them. A comparison table whose proportional column split would cut a header or a cell sizes its columns from what each one needs and wraps the widest column. A cycle node whose label will not fit its circle, such as a single long English word, stretches sideways into a capsule of the same height. Decision tree branch cards grow to the height of the outcomes they lead to, conditions may run back across the column they come from, and outcome names share one size that shrinks as far as the 16px floor when one of them needs it. Icon cards shrink their icon node, numbered cards close the gaps between pills, and a staircase unit takes the room its number leaves before any text is cut. Icon cards also size their type against the number of lines their titles really take, so a tall card row, like the one the split band face draws, no longer cuts each description a line short. Timeline end labels wrap short of their neighbour instead of running under it. The Runway spotlight face wraps a long heading onto two lines, and its fallback heading is fitted to the full line it is set on. Pages whose text already fit render exactly as before.
-
313e8da: A hub and spoke drawing, sankey diagram, five forces cross or set of numbered cards given less height than its smallest complete form now declines the box, marking the whole component as dropped, instead of setting words that stop at their minimum size below the box. A hub and spoke drawing still scales down into a short box as long as its capsules and hub stay tall enough for their words. A sankey node label left off for want of room beside its node is now declared dropped rather than left out silently. Components given the height they ask for render exactly as before.
-
f2d2cd3: A comparison table, matrix, timeline, KPI card row, chevron process, progress donut row, icon card row, set of steps or cycle that is given less height than its smallest form now declines the box, marking the whole component as dropped so the layout can find it more room or the export stops, instead of drawing its last row, card or line below the box. Before declining, each still gives back what it can: a side-by-side timeline gives back description lines and then a title's second line, and a cycle gives back description lines, each cut marked. A comparison table no longer keeps a row it has no room for, and a stacked timeline no longer keeps a milestone it has no room for. Components given the height they ask for render exactly as before.
-
ca12477: A single-number page now sizes the number together with its unit, so a long figure such as "1142.6 万元" stays inside the page margin instead of running its unit toward the edge. Figures whose unit already fit render exactly as before.
pptwise auditand the preview overlay measure a unit set in a smaller size at that size, so these pages are no longer reported as falling off the page. The photo page with the picture on top gives its title more room above and below when a theme sets the title larger, so the title no longer sits on its rule or against the picture. The covers and ending that print the organization in the top-left corner, and the cover with a colored top band, no longer draw the theme's corner mark over or under it. The single-evidence page no longer marks a complete source line as cut. On the page that tiles four to six tall images, a caption longer than its frame wraps onto a second line instead of being cut after about eleven characters. -
054343c: The bento panel page sets its footnote the same distance above the footer line as every other page, where it used to sit 8px from the rule. A line of text asked for at a size below the 16px floor now starts at the floor and is only shortened when it really does not fit there, where before it was always reported as cut even when it was drawn whole.
-
462ca4e: A single-number page no longer shortens the number to make room for its unit. When the number and its unit do not fit on one line, the unit is set smaller first, and a number too long to fit even then moves to a plain page that shows it in full as an ordinary metric card. Pages whose number and unit already fit render exactly as before.
-
d37c99a: The homeroom theme's two faint notebook rules on content pages now sit at the bottom of the page, below the footer line, instead of across the middle of the content area. Before, they ran through chart axis labels, card text, table rows and other words that landed at those heights, and read like a strikethrough. Cover and chapter pages keep their rules where they were. When a deck turns on the content-page footer or logo (
brandingset tofullorminimal), the footer area belongs to that, and content pages draw no rules. -
8a54bcd: An iceberg's tip line now sits a few pixels above the waterline instead of resting on it. A roadmap no longer marks a short period such as "Q1" as cut, sets each row value on the same baseline as its label, and gives a long row label the room its short values leave, or a second line, instead of cutting its end off. Rings in a narrow box, such as the side panel of a three-part page, now keep a label column wide enough for their labels and print every description in full, with the core growing a little when it needs to hold its own name. When the box is still too short, the page moves to a layout with more room instead of cutting text or leaving a line off the bottom. Rings that already fit render exactly as before.
-
199355b: On the page with a wide lead column and two framed panels, the lead column now goes to the first block that is not running text, and a paragraph, bullet list, callout or quote moves to the panel beside it. A page that opened with a one-sentence introduction used to give that sentence the wide column and squeeze the drawing it introduced into the narrow panel, where English rings could not fit and the page moved to a plainer layout. Pages whose blocks are all running text keep their order.
A business model canvas measures each block title in the typeface it draws it in, so a block no longer carries an empty title line, or drops its last item, where an English title wraps differently in the heading typeface than in the width estimate. A positioning map places an English name by its real width instead of half again, so a crowded map no longer leaves off a name that fits. A waterfall with a value or running total past 1e300, which used to draw every bar at NaN, is refused by validate with the same advice charts give: divide every item by one power of ten and name the unit in
unit. -
23415cf: A Chinese clause now breaks between any two characters even when the sentence has spaces elsewhere, as in 镜像构建从 Jenkins 迁到 GitHub Actions,平均构建时长…. It used to move to the next line whole, which could leave ...