CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Five-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, and produce the deck illustrations + thumbnail visual layer. Includes a 102-entry Presentation Patterns taxonomy (91 observable, 11 unobservable go-live items) for scoring, brainstorming, and go-live preparation.

95

1.20x
Quality

96%

Does it follow best practices?

Impact

95%

1.20x

Average score across 32 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

generation.mdskills/illustrations/references/

Deck Illustration Generation — Detail

Reference for Step 3 (deck illustrations) and Step 5 (apply to deck) in SKILL.md. The illustration-rules and title-overlay-rules steering rules are auto-loaded — apply them, don't restate them.

Setup

Before generating, ensure:

  1. API key — add your Gemini key to {vault}/secrets.json (preferred):

    { "gemini": { "api_key": "your-key-here" } }

    Or set GEMINI_API_KEY as a fallback. Get a key from https://aistudio.google.com/app/apikey.

  2. Model availability — verify the model in the outline header is accessible with your key. The script reads it from the **Model:** \model-name`` line in the Illustration Style Anchor section.

  3. Python 3 — stdlib only (urllib, json, base64). No pip install needed.

Slide Selection Modes

python3 skills/illustrations/scripts/generate-illustrations.py presentation-outline.md remaining

remaining skips slides whose images already exist; all regenerates every slide; specific slides can be passed as 2 5 9 or a range 2-10.

Model Comparison (Phase 2 model selection)

python3 skills/illustrations/scripts/generate-illustrations.py presentation-outline.md --compare 2

Generates the same prompt across multiple Gemini image models for visual comparison. Output lands in illustrations/model-comparison/.

Edit / Fix / Versioned Generation

CommandWhen to useOutput
--edit N "<prompt>"Removing content from an existing imageslide-NN-vM.ext
--fix N "<prompt>"Iterating on a near-perfect image (90%+ correct)slide-NN-vM.ext (next version)
-v 2 5 9Generate without overwriting the base imageslide-NN-vM.ext

--edit and --fix auto-append the safety suffixes (DO NOT add any new elements, Let background continue naturally). The explicit preservation list (Keep the X. Keep the Y.) must always be added manually — the script cannot know what to preserve.

Slide Format Vocabulary

The outline's Illustration Style Anchor block defines format codes per slide. The apply-illustrations-to-deck.py script maps each code to a layout + positioning:

Outline FormatLayoutImage Handling
FULLBLANKFull-bleed image at 16:9 slide dimensions (left=0, top=0, width=13.333", height=7.5"); title repositioned into the declared Safe zone
FULL + text overlayBLANKFull-bleed image + manage_text overlay
IMG+TXTTITLE only (no body)Image ~60% of slide on the left, title + body on the right. Exact geometry is owned by the IMGTXT_* constants in skills/illustrations/scripts/apply-illustrations-to-deck.py (image left=0.3", top=0.8", width=8.0", height=5.9"; text column left=8.5", width≈4.5") — read the constants when debugging layout, not the table
EXCEPTIONPer content typeNo generated image — real asset from [IMAGE NN] placeholder; handled by presentation-creator's slide walk, not by this skill

File Layout

{talk-dir}/illustrations/
├── slide-01.jpg               ← one file per illustrated slide
├── slide-02.png
├── slide-05-v2.jpg            ← versioned iterations (--fix / --edit / -v)
├── builds/                    ← progressive reveal build steps (see builds.md)
│   ├── slide-05-build-00.jpg
│   ├── slide-05-build-01.jpg
│   └── slide-05-build-02.jpg
└── model-comparison/          ← --compare output

Title Safe Zone

The Safe zone: line in each FULL slide block tells the script to append a TITLE SAFE ZONE directive to the prompt before generation. Five zones are supported: upper_third, middle_third, lower_third, left_half, right_half. See skills/illustrations/references/title-placement.md for the outline schema and rules/title-overlay-rules.md for the full policy (auto-loaded).

Apply to Deck

python3 skills/illustrations/scripts/apply-illustrations-to-deck.py \
  deck.pptx illustrations/ presentation-outline.md \
  --out deck-with-titles.pptx \
  --scrim-color 100903 --scrim-alpha 47553   # omit for plain 45% black

The script:

  1. For each slide whose outline block has a Safe zone: field, swaps the background picture with the matching illustration from illustrations/.
  2. Adds a zone-sized scrim rectangle between the picture and the title text.
  3. Repositions title text boxes into the declared safe zone.
  4. For each slide with Format: IMG+TXT, applies the IMG+TXT layout (image ~60% on the left, title placeholder + body on the right).
  5. Inserts build sequences (see skills/illustrations/references/builds.md) for any slide with a - Builds: block.

If no scrim color is supplied, run python3 skills/illustrations/scripts/suggest-scrim-color.py illustrations/ first to sample a deck-tuned color. For warm or cool styled decks, the sampled color reads as "deeper shadow in the same style" instead of a flat black film.

skills

README.md

tile.json