storyboard-html-preview — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited storyboard-html-preview (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are turning structured storyboard files into a single shareable HTML document. The output is what an editor, stakeholder, or client opens in a browser without thinking about it.
The constraint is non-negotiable: single file, no build step, no server, works offline. Any time the output requires "run this build command" or "host this somewhere," the skill has failed.
Trigger when the user:
storyboard.md + shots.json + asks for a deliverable for reviewOne file: preview.html. Self-contained. Inline CSS. No JavaScript dependencies (vanilla JS only, embedded). No external font files (uses system stack with brand-font fallbacks). No external images (placeholder slots; if generated images exist, embed as base64 OR reference relative paths).
output/
├── storyboard.md # input
├── shots.json # input
├── text-overlays.json # input
├── brand-lock.snapshot.md # input
└── preview.html # ← what this skill producesIf the user has generated images (output/generated/shot_01.png, etc.), the HTML references them via relative paths so the file works when the whole output/ folder is shared.
If no generated images exist yet, the HTML uses styled placeholder cards with the prompt text and shot spec, still useful for review and handoff.
Required:
shots.jsontext-overlays.jsonbrand-lock.snapshot.mdOptional:
storyboard.md (for narrative context, surface the brief at the top)output/generated/shot_NN.{png,jpg} (if image generation has happened)If shots.json doesn't validate against the schema, stop and tell the user.
From brand-lock.snapshot.md, extract:
The HTML preview should feel like the brand without going overboard. Quiet branding, not loud.
Use templates/preview.html.tpl as the structural template. Read it before generating.
The HTML structure:
<!DOCTYPE html>
<html>
<head>
<meta>
<title>{project title}</title>
<style>
/* All CSS inline. ~200 lines. Brand-aware. */
/* Print stylesheet included. */
</style>
</head>
<body>
<header>
<!-- Project title, duration, aspect, generated timestamp -->
</header>
<section class="brief">
<!-- Brief summary if storyboard.md provides one -->
</section>
<section class="series-lock">
<!-- Character / environment / lighting / color grade -->
</section>
<section class="shots">
<!-- One card per shot -->
<article class="shot" id="shot_01">
<div class="shot-frame">
<!-- generated image OR styled placeholder -->
</div>
<div class="shot-meta">
<!-- timestamp, framing, angle, motion -->
</div>
<div class="shot-subject">
<!-- subject description -->
</div>
<div class="shot-text-overlay">
<!-- if on_screen_text exists, show overlay content with timing -->
</div>
<div class="shot-rationale">
<!-- rationale text -->
</div>
</article>
<!-- ... -->
</section>
<footer>
<!-- audit trail: brand-lock snapshot reference, timestamp -->
</footer>
<script>
/* Vanilla JS only. Optional: keyboard nav, jump-to-shot, expand/collapse. */
</script>
</body>
</html>If output/generated/shot_NN.{png,jpg} files exist, the HTML references them via relative path:
<img src="generated/shot_01.png" alt="Shot 01: hook beat" />This works when the whole output folder is zipped and shared.
For hard-copy print (single file with no folder structure), the skill can offer to inline images as base64. Ask the user which they prefer if generated images are present.
If no images exist, render styled placeholder cards showing the framing, subject, and prompt summary. These are still useful for stakeholder review at the storyboard stage.
Template flag convention. When composing the per-shot context for preview.html.tpl, set exactly one of:
has_image: true and image_path: "generated/shot_NN.png", when a generated image existshas_no_image: true, when no generated image exists (renders the placeholder card)The template uses two parallel {{#if}} blocks rather than {{#if}}/{{else}} to keep the rendering portable across template engines.
For text overlays, set on_screen_text: true (boolean flag) plus the resolved overlay fields (overlay_content, overlay_position, overlay_size, overlay_font, overlay_weight, overlay_color, overlay_enter_at, overlay_enter_anim, overlay_exit_at) when the shot has an on_screen_text reference in shots.json. Otherwise omit the flag.
For every shot with an on_screen_text reference, the HTML shows:
This gives the reviewer a sense of what the final composited frame will look like, even before final compositing happens.
Include @media print rules that:
The user should be able to hit Cmd-P / Ctrl-P and get a clean PDF.
The output is one .html file. If you find yourself wanting a separate stylesheet or JS file, inline it. If you find yourself wanting a build step, you're solving the wrong problem.
No CDN scripts. No Google Fonts. No external CSS frameworks. The file must work with no internet connection.
The exception: if the user explicitly opts in (e.g. "make it pretty, I'm online"), Tailwind via CDN is acceptable. Default is no.
Hit Cmd-P. The result should be a clean PDF. If layout breaks across page boundaries, the print stylesheet is broken.
Use brand colors as accents, not as full backgrounds. The reviewer's job is to read the storyboard, not admire the design. Subtle.
Stakeholders open links on phones. The HTML should be readable on mobile without horizontal scroll. Simple responsive CSS.
templates/preview.html.tpl, the structural templatetemplates/styles.css.tpl, the CSS to inlinetemplates/print.css.tpl, the print rulesThe skill reads all three and assembles them into a single preview.html.
Before declaring done, verify:
shots.json is presenttext-overlays.json is renderedexamples/ contains generated preview.html files for the storyboard-architect example projects. Open them in a browser to calibrate quality.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.