Skip to content
Back to skills

Visual Audit

ASecurity

Perform adversarial visual audit of Quarto RevealJS slides checking for density violations, overflow, font consistency, box fatigue, and centering issues, on full-deck screenshots from scripts/shoot_slides.py.

  • 6 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 2, 2026
ai-agentspythonbash

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add alohays/paper2pr --skill visual-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Visual Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Visual Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/alohays-visual-audit/badge)](https://www.skillsdirectory.com/skills/alohays-visual-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: visual-audit
description: Perform adversarial visual audit of Quarto RevealJS slides checking for density violations, overflow, font consistency, box fatigue, and centering issues, on full-deck screenshots from scripts/shoot_slides.py.
argument-hint: "[DeckName]"
allowed-tools: ["Read", "Grep", "Glob", "Write", "Bash", "Agent"]
---

# Visual Audit of Slide Deck

Perform a thorough visual layout audit of a slide deck, on the source and on
the rendered pixels.

## Steps

1. **Resolve the deck** named in `$ARGUMENTS` and load its premises:

   ```bash
   python3 scripts/deckpath.py $ARGUMENTS --field qmd            # the source
   python3 scripts/deckprofile.py $ARGUMENTS                     # resolved profile JSON
   cat "$(python3 scripts/deckpath.py $ARGUMENTS --field config)"  # <deck>.deck.yml
   ```

   The density numbers below come from the profile JSON (`bullets_max`,
   `bullets_max_with_figure`, `bullets_max_two_line`, `box_density`,
   `max_nesting`); quote the deck's own budget in every density finding.

2. **Determine the ruleset:**
   - Main theme (`clean-academic.scss`) -> full design-principles audit
     (`.claude/rules/slide-design-principles.md`)
   - Legacy theme (`clean-academic-legacy.scss`) or SUNY's own theme ->
     legacy audit only (overflow, spacing); skip density limits

3. **Screenshot every slide:**

   ```bash
   python3 scripts/shoot_slides.py $ARGUMENTS --out /tmp/$ARGUMENTS-shots
   ```

   This renders the html first when it is missing or older than the qmd,
   then writes one 1280x720 PNG per slide in reading order (vertical stacks
   included). Read every PNG - the pixels catch what the source hides:
   real overflow, wrapped bullets, a figure that failed to load, a video
   slide stuck on a black frame. (`bash scripts/preview.sh <name>` still
   opens the deck in a browser when you need to interact with a slide.)

4. **Audit every slide for:**

   **DENSITY (new decks, budgets from the profile JSON):** >1 core message,
   more bullets than `bullets_max` (`bullets_max_with_figure` with a figure;
   one less again if any bullet wraps to two lines), more wrapped bullets
   than `bullets_max_two_line`, any three-line bullet, more colored boxes
   than `box_density`, nesting deeper than `max_nesting`
   **OVERFLOW:** Content exceeding slide boundaries - confirm on the PNGs
   **FONT CONSISTENCY:** Any `.smaller`/`.smallest` in a new deck (forbidden),
   inline font-size overrides below 1em
   **CENTERING (new decks):** ad-hoc positioning fighting the theme,
   unjustified `{.top-align}` or `{.left}`, a deck that re-enables
   `auto-stretch` over the `Quarto/_quarto.yml` project default of false
   (or a `_fixtures/` qmd that fails to repeat it - fixtures sit outside
   the project defaults)
   **BOX FATIGUE:** more boxes on one slide than the budget, wrong box types
   **LAYOUT:** Missing transitions, missing framing sentences, semantic colors

5. **Produce a report** organized by slide with severity and
   recommendations, its header stating the profile, the audience (from
   `deck.yml`, else the profile), and the budget applied

6. **Follow the split-first principle:**
   1. Split into two slides (the default answer)
   2. Cut content (move to speaker notes)
   3. Two columns (only for genuinely side-by-side pairings)
   4. Reduce image/SVG size
   5. Font size reduction - never recommend it

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.