slides-grab 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/slides-grab-design/SKILL.md +6 -2
- package/skills/slides-grab-design/references/beautiful-slide-defaults.md +45 -2
- package/skills/slides-grab-design/references/detailed-design-rules.md +13 -0
- package/src/editor/codex-edit.js +1 -1
- package/src/editor/js/editor-state.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slides-grab",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Agent-first presentation framework — plan, design, and visually edit HTML slides with Claude Code or Codex, then export to PDF or experimental/unstable PPTX/Figma formats",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "vkehfdl1",
|
|
@@ -23,7 +23,7 @@ Generate high-quality `slide-XX.html` files in the selected slides workspace (`s
|
|
|
23
23
|
## Workflow
|
|
24
24
|
1. Read approved `slide-outline.md` and extract the `style` field from its meta section.
|
|
25
25
|
2. Load the chosen style's full spec from `src/design-styles-data.js` — colors, fonts, layout, signature elements, and things to avoid. If the meta specifies a custom direction instead of a bundled ID, use that custom direction as the design basis.
|
|
26
|
-
3. Before generating slides, write a quick **visual thesis** (mood/material/energy), a **content plan** (opener → support/proof → detail/story → close/CTA), and the core design tokens (background, surface, text, muted, accent + display/headline/body/caption roles). Ground these tokens in the chosen style's spec.
|
|
26
|
+
3. Before generating slides, write a quick **visual thesis** (mood/material/energy), a **content plan** (opener → support/proof → detail/story → close/CTA), a **system declaration** (reused layout patterns, max two background colors, max two typefaces, image-led vs text-led slides, where section dividers reset tempo), and the core design tokens (background, surface, text, muted, accent + display/headline/body/caption roles). Ground these tokens in the chosen style's spec. Follow `references/beautiful-slide-defaults.md` for the full working model, content discipline, color discipline, and AI slop tropes to avoid.
|
|
27
27
|
4. If you need to confirm or revisit the approved bundled style before designing, re-run `slides-grab list-styles` and open the gallery from `slides-grab preview-styles` so the Stage 2 deck stays aligned with the Stage 1 direction.
|
|
28
28
|
5. Generate slide HTML files with 2-digit numbering in selected `--slides-dir`.
|
|
29
29
|
6. When a slide needs iconography, prefer Lucide as the default icon library. Use clean Lucide icons before falling back to emoji, and only use emoji when the brief explicitly calls for them.
|
|
@@ -55,6 +55,10 @@ Generate high-quality `slide-XX.html` files in the selected slides workspace (`s
|
|
|
55
55
|
- Treat opening slides and section dividers like posters, not dashboards.
|
|
56
56
|
- Default to cardless layouts; only add a card when it improves structure or comprehension.
|
|
57
57
|
- Use whitespace, alignment, scale, cropping, and contrast before adding decorative chrome.
|
|
58
|
+
- Do not pad slides with filler copy, dummy stats, or decorative iconography — when a slide feels empty, solve it with layout and scale, not invented content.
|
|
59
|
+
- Pull every color from the approved style spec or the user's brand tokens; extend only with harmonic `oklch()` neighbors. Do not invent fresh standalone hex colors mid-slide.
|
|
60
|
+
- Keep body copy at 14pt minimum on a 720pt × 405pt slide and never render any text below the 10pt absolute floor.
|
|
61
|
+
- Avoid AI slop tropes — aggressive gradient backgrounds, left-border accent cards, SVG-drawn imagery, generic font stacks (Inter/Roboto/Arial), and generic 3×2 icon-plus-blurb grids. See `references/beautiful-slide-defaults.md` for the full list.
|
|
58
62
|
- Prefer `tldraw` for complex diagrams instead of recreating dense node/edge diagrams directly in HTML/CSS.
|
|
59
63
|
- Use `slides-grab tldraw` plus `templates/diagram-tldraw.html` when that gives a cleaner, more export-friendly result.
|
|
60
64
|
- Do not present slides for review until `slides-grab validate --slides-dir <path>` passes.
|
|
@@ -65,5 +69,5 @@ Generate high-quality `slide-XX.html` files in the selected slides workspace (`s
|
|
|
65
69
|
For full constraints and style system, follow:
|
|
66
70
|
- `references/design-rules.md`
|
|
67
71
|
- `references/detailed-design-rules.md`
|
|
68
|
-
- `references/beautiful-slide-defaults.md` — slide-specific art direction defaults adapted from OpenAI's frontend design guidance
|
|
72
|
+
- `references/beautiful-slide-defaults.md` — slide-specific art direction defaults adapted from OpenAI's frontend design guidance and Anthropic's Claude design system guidance (content/color discipline, system declaration, AI slop tropes)
|
|
69
73
|
- `references/design-system-full.md` — archived full design system, templates, and advanced pattern guidance
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
# Beautiful Slide Defaults
|
|
2
2
|
|
|
3
|
-
Slide-specific art direction guidance adapted from OpenAI's frontend design guidance for GPT-5.4. Use it to make HTML slides feel deliberate, premium, and instantly scannable without breaking `slides-grab`'s export constraints.
|
|
3
|
+
Slide-specific art direction guidance adapted from OpenAI's frontend design guidance for GPT-5.4, with additional distilled principles from Anthropic's Claude design system guidance. Use it to make HTML slides feel deliberate, premium, and instantly scannable without breaking `slides-grab`'s export constraints.
|
|
4
4
|
|
|
5
5
|
## Working Model
|
|
6
6
|
|
|
7
|
-
Before building the deck, write
|
|
7
|
+
Before building the deck, write three things:
|
|
8
8
|
|
|
9
9
|
- **visual thesis** — one sentence describing the mood, material, energy, and imagery treatment
|
|
10
10
|
- **content plan** — opener → support/proof → detail/story → close/CTA or decision
|
|
11
|
+
- **system declaration** — one short paragraph committing to the system you will reuse across the deck
|
|
11
12
|
|
|
12
13
|
If the style direction is still open, gather visual references or a mood board first. Define the core tokens early: `background`, `surface`, `primary text`, `muted text`, `accent`, plus typography roles for `display`, `headline`, `body`, and `caption`.
|
|
13
14
|
|
|
15
|
+
### Vocalize the System Before Designing
|
|
16
|
+
|
|
17
|
+
After the visual thesis and tokens are set, write the system declaration out loud so the deck stays consistent and iteration stays cheap. Name:
|
|
18
|
+
|
|
19
|
+
- the layout patterns you will reuse for titles, section headers, content, quotes, and closing slides
|
|
20
|
+
- the two background colors (max) you will use to introduce intentional rhythm between sections and content slides
|
|
21
|
+
- the two typefaces max, plus the one accent color that carries focus
|
|
22
|
+
- which slides will be image-led, which will be text-led, and where section dividers reset tempo
|
|
23
|
+
|
|
24
|
+
A deck without a declared system drifts. Committing to the system up front is the single cheapest way to make the deck feel deliberate.
|
|
25
|
+
|
|
14
26
|
## Beautiful Defaults for Slides
|
|
15
27
|
|
|
16
28
|
- Start with composition, not components.
|
|
@@ -34,6 +46,35 @@ Use a narrative rhythm that feels intentional:
|
|
|
34
46
|
|
|
35
47
|
Section dividers should reset the visual tempo. Alternate dense proof slides with simpler image-led or statement-led slides so the deck keeps breathing.
|
|
36
48
|
|
|
49
|
+
## Content Discipline
|
|
50
|
+
|
|
51
|
+
Every element must earn its place. When a slide feels empty, solve it with layout, scale, whitespace, and a stronger visual anchor — never by inventing filler content.
|
|
52
|
+
|
|
53
|
+
- Do not pad slides with placeholder copy, dummy stats, or decorative iconography just to fill space.
|
|
54
|
+
- Avoid data slop: invented numbers, vague percentages, and stat strips whose only purpose is to look informational.
|
|
55
|
+
- If you believe a slide needs an extra section, example, page, or call-out beyond the approved outline, ask the user before adding it. The user knows the audience better than you do.
|
|
56
|
+
- Say one thousand no's for every yes. Cutting is a design tool.
|
|
57
|
+
|
|
58
|
+
## Color Discipline
|
|
59
|
+
|
|
60
|
+
- Pull every color from the approved style spec in `src/design-styles-data.js` (or the user's brand tokens when they override the bundled style). Do not invent fresh standalone hex colors mid-slide.
|
|
61
|
+
- If the approved palette is too restrictive for a specific slide, extend it harmonically with `oklch()` — derive neighbors from the existing accent or surface — rather than picking a fresh hex from scratch.
|
|
62
|
+
- Keep one accent color per deck. Two background colors max across the entire deck; use them to introduce rhythm between section dividers and content slides, not to decorate individual slides.
|
|
63
|
+
- Every color must trace back to the approved palette or a documented harmonic extension of it.
|
|
64
|
+
|
|
65
|
+
## AI Slop Tropes to Avoid
|
|
66
|
+
|
|
67
|
+
Common AI-generated patterns that cheapen a deck instantly. Treat these as anti-patterns unless the brief explicitly asks for them.
|
|
68
|
+
|
|
69
|
+
- Aggressive full-slide gradient backgrounds used as the primary surface treatment.
|
|
70
|
+
- Rounded-rectangle containers with a solid left-border accent stripe (the AI "accent card" default).
|
|
71
|
+
- Drawing iconography or product imagery with inline SVG shapes — use a real asset or a `data-image-placeholder` box instead.
|
|
72
|
+
- Overused, generic font families: Inter, Roboto, Arial, Fraunces, and OS system stacks. Prefer Pretendard or the style-specified typeface.
|
|
73
|
+
- Emoji as default iconography. Prefer Lucide; emoji is only for briefs that explicitly call for a playful, native-emoji tone.
|
|
74
|
+
- "Feature card grid" 3×2 layouts of icon + heading + two-line blurb used as the generic answer to any content slide.
|
|
75
|
+
- Faux chrome: drop shadows, subtle gradients, and card borders added to decorate empty space instead of carrying meaning.
|
|
76
|
+
- Placeholder-looking real imagery: stock photos that obviously do not match the topic, or AI-generated images with visible artifacts. Prefer a well-composed `data-image-placeholder` over a bad real image.
|
|
77
|
+
|
|
37
78
|
## Review Litmus
|
|
38
79
|
|
|
39
80
|
Before showing the deck, ask:
|
|
@@ -43,3 +84,5 @@ Before showing the deck, ask:
|
|
|
43
84
|
- Is there one real visual anchor, not just decoration?
|
|
44
85
|
- Would this still feel premium without shadows, cards, or extra chrome?
|
|
45
86
|
- Can any line of copy, badge, or callout be removed without losing meaning?
|
|
87
|
+
- Does every color on the slide trace back to the approved style spec or a documented `oklch` harmonic extension of it?
|
|
88
|
+
- Does any slide lean on an AI slop trope? If so, replace it with composition, typography, or real imagery before review.
|
|
@@ -24,6 +24,19 @@
|
|
|
24
24
|
- All text must be inside `<p>`, `<h1>`-`<h6>`, `<ul>`, `<ol>`, or `<li>`.
|
|
25
25
|
- Never place text directly in `<div>` or `<span>`.
|
|
26
26
|
|
|
27
|
+
## Typography Scale Rules
|
|
28
|
+
- Body copy minimum is 14pt on a 720pt × 405pt slide; prefer 16-20pt so copy reads cleanly at presentation distance and on PDF export.
|
|
29
|
+
- Absolute floor for captions, labels, footnotes, and meta text is 10pt. Never render any text below 10pt.
|
|
30
|
+
- Display and title text should scale well above body copy — prefer 36pt or larger so the slide's main takeaway reads in 3-5 seconds.
|
|
31
|
+
- If content does not fit at the minimum scale, cut content. Do not shrink type to accommodate more.
|
|
32
|
+
- Keep at most two typefaces across the deck. One display/headline face plus one body face is enough.
|
|
33
|
+
|
|
34
|
+
## Color Usage Rules
|
|
35
|
+
- Pull every color from the approved style spec in `src/design-styles-data.js` or the user-provided brand tokens. Do not invent fresh standalone hex colors mid-slide.
|
|
36
|
+
- If the approved palette cannot cover a specific slide, extend it harmonically with `oklch()` — derive the new color from the existing accent, surface, or background — rather than picking a fresh hex from scratch.
|
|
37
|
+
- Keep one accent color per deck. Two background colors max across the entire deck, used to introduce rhythm between section dividers and content slides.
|
|
38
|
+
- Every CSS color must keep the `#` prefix and survive raster export to PPTX/PDF; avoid non-sRGB values that will flatten unexpectedly.
|
|
39
|
+
|
|
27
40
|
## Icon Usage Rules
|
|
28
41
|
- Prefer Lucide as the default icon library for slide UI elements, callouts, and supporting visuals.
|
|
29
42
|
- Do not default to emoji for iconography; reserve emoji for cases where the brief explicitly wants a playful or native-emoji tone.
|
package/src/editor/codex-edit.js
CHANGED
|
@@ -450,7 +450,7 @@ export function buildCodexExecArgs({ prompt, imagePath, model }) {
|
|
|
450
450
|
return args;
|
|
451
451
|
}
|
|
452
452
|
|
|
453
|
-
export const CLAUDE_MODELS = ['claude-opus-4-
|
|
453
|
+
export const CLAUDE_MODELS = ['claude-opus-4-7', 'claude-sonnet-4-6'];
|
|
454
454
|
|
|
455
455
|
export function isClaudeModel(model) {
|
|
456
456
|
return typeof model === 'string' && CLAUDE_MODELS.includes(model.trim());
|
|
@@ -15,7 +15,7 @@ export const POPOVER_TEXT = 'text';
|
|
|
15
15
|
export const POPOVER_TEXT_COLOR = 'text-color';
|
|
16
16
|
export const POPOVER_BG_COLOR = 'bg-color';
|
|
17
17
|
export const POPOVER_SIZE = 'size';
|
|
18
|
-
export const DEFAULT_MODELS = ['gpt-5.4', 'gpt-5.3-codex', 'gpt-5.3-codex-spark', 'claude-opus-4-
|
|
18
|
+
export const DEFAULT_MODELS = ['gpt-5.4', 'gpt-5.3-codex', 'gpt-5.3-codex-spark', 'claude-opus-4-7', 'claude-sonnet-4-6'];
|
|
19
19
|
export const DIRECT_TEXT_TAGS = new Set(['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li']);
|
|
20
20
|
export const NON_SELECTABLE_TAGS = new Set(['html', 'head', 'body', 'script', 'style', 'link', 'meta', 'noscript']);
|
|
21
21
|
|