CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Seven-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, produce the deck illustrations + thumbnail visual layer, publish talk pages to a Jekyll shownotes site, and verify a recorded screencast against its storyboard. Includes a 113-entry Presentation Patterns taxonomy (83 observable: 64 patterns + 19 antipatterns; 30 unobservable: 21 patterns + 9 antipatterns) for scoring, brainstorming, and go-live preparation.

74

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

style-catalog.mdskills/illustrations/references/

Reusable Style Catalog

The illustrations skill owns these schemas. The packaged public layer lives at skills/illustrations/catalog/styles.json; the optional personal layer is {vault_root}/style-catalog.json, separate from the tracking database and descriptive visual_style_history. No tracking schema change or talk reparse is needed. Never infer a reusable anchor from a talk title or transcript alone.

Read and select

Resolve {speaker_toolkit_root} from the loaded skill. With a known vault:

python3 "{speaker_toolkit_root}/skills/illustrations/scripts/style_catalog.py" list \
  --vault "{vault_root}"

Omit --vault for public-only selection. A missing personal file means an empty overlay. A present invalid, unavailable, or unsupported-version personal file stops selection; it must not silently expose the shadowed public defaults. Personal entries replace entire public entries of the same slug, not individual fields. Distinct slugs form the union; output is sorted by slug. Neither layer is modified by a read, and no image or remote sample is fetched.

Use the merged entries in Step 7's source/fit judgment. A catalog entry is a candidate, not a speaker's approval or a substitute for inspecting a rendered sample. Existing personal history still informs which entries fit. New styles can be proposed when the selected idea sources need them; record them through the owner tool instead of maintaining another ad hoc reusable library.

After the speaker chooses the exploration candidates, author a selection JSON:

{
  "schema_version": 1,
  "slugs": ["comic-book-hero", "isometric-systems-3d"],
  "slides": {"FULL": 7},
  "models": ["gemini-3-pro-image"]
}

Use the live Step 6 shortlist, not the illustrative model ID above. slides maps FULL and/or IMG+TXT to positive outline slide numbers. Select one to twenty distinct slugs and one to twenty distinct model IDs. Explore a single composition per grid; poster-theatrical requires FULL only. Selected display names must have distinct exploration-directory slugs. Unknown fields and unsupported selection versions are refused.

python3 "{speaker_toolkit_root}/skills/illustrations/scripts/style_catalog.py" candidates \
  --vault "{vault_root}" --selection selection.json \
  --output "{talk_dir}/style-explore/candidates.json"

Create the output parent directory first. An identical output is reused; different existing bytes are preserved and require a fresh filename. The owner emits candidate schema v2 with complete style entries and layer/digest receipts. The generator reads v1 and v2 without rewriting either. Its v2 path applies each style's conventions and, for posters, text treatment to the representative slide's actual text_overlay and the outline's footer. A poster representative must have text and no safe zone. Follow Step 8's normal render and Step 9's human-choice/render-before-bake gates; copy the selected entry's anchor, conventions, composition, and text treatment when baking. Receipts identify the snapshot used, not a promise that a later catalog read is unchanged.

Catalog schema v1

Root: exactly schema_version: 1 and styles: [], with at most 200 entries. Every entry has exactly the fields below; entry, sample, and provenance versions are independently explicit integers, not booleans. Unknown fields, duplicate JSON keys, nonfinite numbers, duplicate layer slugs, and future versions fail closed. UTF-8 inputs and outputs are bounded to 2 MiB.

FieldContract
schema_versionInteger 1
slugStable lowercase hyphenated identifier, at most 100 characters
nameNonempty single-line display name, at most 160 characters
anchorsExactly FULL and IMG+TXT, both nonempty style-only text
text_treatmentText-rendering style; nonempty for poster-theatrical
conventionsStyle-only continuity/color conventions; empty allowed
compositionposter-theatrical or overlay
tagsOne to twenty distinct slug-shaped concept-fit hints
sampleVersioned reference described below
provenanceVersioned origin described below

Sample has exactly schema_version: 1, kind, location, description. Kinds: local-image (personal only), remote-image (HTTPS), or reference (HTTPS source describing an unbundled sample). A reference is not an inspected image; keep that limitation visible. Local sample paths are resolved by the speaker relative to the vault unless absolute. Readers do not open them.

Provenance has exactly schema_version: 1, kind, reference, note. Kinds: exploration, delivered-talk, contribution, or personal. Public provenance must be a credential-free public HTTPS reference. Personal provenance may refer to local evidence. Plain-text fields are bounded to 16,000 characters; do not include credentials or private source text in a public entry. URL user information is forbidden in every sample/provenance reference, including personal local-image fields and personal provenance.

The merged view is a read-only v1 envelope with public_sha256, personal_sha256 (or missing), and styles. Each style retains its entry fields and adds catalog_source: exactly schema_version: 1, layer (public or personal), and the source layer's sha256. Candidate v2 preserves these styles; its other root fields remain slides and models. See skills/illustrations/references/style-explore-candidates-schema.md.

Personal owner writes

Only the put action of skills/illustrations/scripts/style_catalog.py writes the personal layer. Author one complete entry JSON, then preview against personal_sha256 from a fresh list. For an absent file, use missing:

python3 "{speaker_toolkit_root}/skills/illustrations/scripts/style_catalog.py" put \
  --vault "{vault_root}" --entry personal-entry.json --expected-sha256 missing

Review the entry and preview. To authorize the same operation, repeat with --apply and the same --expected-sha256. The configured environment must have the project's filelock dependency. All owner writers share a canonical-path lock. A stale digest fails before mutation. Replacement backs up exact prior bytes as style-catalog.json.backup-<sha256>, then atomically publishes the whole validated catalog. Existing other entries retain their values; a semantic no-op preserves the complete original bytes. Keep backups private with the catalog. Use verified backups as evidence when restoring reviewed entries through put; never copy a backup over live state or add a reader-side reset.

There are no legacy versions of this new artifact. Readers never migrate or restamp unsupported records. A future shape change must increment its owner's version and ship the relevant reader/migration work before writing that shape. No catalog write requeues talks, changes active claims, or edits the public file.

Discoveries and opt-in contribution

After ingress or exploration yields a genuinely new, visually evidenced style, compare it with the merged catalog. The anchor discipline in rules/illustration-rules.md applies; semantic style-only review remains human/ agent judgment, not a regex classifier. Keep signature/private styles personal.

Offer one separate question: “Would you like to contribute this reusable style to the public catalog?” Never submit automatically or bundle this with a clarification question. A decline ends this flow without a write or upload.

On acceptance, show the exact proposed entry, sample, and provenance; remove private paths, talk content, and identifying material the speaker has not agreed to share. Obtain approval for that exact public payload. Use the style-contribution issue form at New style contribution. The form requests the complete catalog entry, a representative image/link, source attribution, and sharing consent. A maintainer validates and reviews it before adding it to the public catalog. An issue is a proposal, not automatic catalog admission, rendered-sample approval, or permission to publish a vault.

The initial three Berglund exploration entries cite their owner-supplied issue anchors; their images are unbundled references. The separate delivered-talk seed audit covers the April 2026 onward deliveries visible on 2026-09-05. It records per-deck inspection, reusable style mappings and source fingerprints. Its samples are existing public deck links, not bundled raster images. For later additions, verify delivery/source identity, inspect actual slides, extract style-only features, and retain a consented sample with exact provenance. The three exploration seeds are not delivered-talk evidence.

skills

README.md

tile.json