Install
$ agentstack add skill-whystrohm-shotkit-storyboard-html-preview ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Storyboard HTML Preview
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.
When to use
Trigger when the user:
- Asks to preview, share, or export a storyboard
- Wants a printable version
- Says "what's the next step" after a storyboard-architect run
- Hands off
storyboard.md+shots.json+ asks for a deliverable for review
What you produce
One 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 produces
If 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.
Workflow
Step 1. Read inputs
Required:
shots.jsontext-overlays.jsonbrand-lock.snapshot.md
Optional:
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.
Step 2. Extract brand parameters
From brand-lock.snapshot.md, extract:
- Palette (hex values), used for HTML accent colors
- Display font and body font names, used as font-family values with system fallbacks
- Brand voice / mood, used in subtle copy choices
The HTML preview should feel like the brand without going overboard. Quiet branding, not loud.
Step 3. Generate the HTML
Use templates/preview.html.tpl as the structural template. Read it before generating.
The HTML structure:
{project title}
/* All CSS inline. ~200 lines. Brand-aware. */
/* Print stylesheet included. */
/* Vanilla JS only. Optional: keyboard nav, jump-to-shot, expand/collapse. */
Step 4. Embed images if available
If output/generated/shot_NN.{png,jpg} files exist, the HTML references them via relative path:
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: trueandimage_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.
Step 5. Render text overlays visually
For every shot with an on_screen_text reference, the HTML shows:
- The text content rendered in approximately the brand font (or visible fallback)
- The position indicated visually (lower-third, center, etc.)
- Timing info (enter/exit beats)
This gives the reviewer a sense of what the final composited frame will look like, even before final compositing happens.
Step 6. Print stylesheet
Include @media print rules that:
- Hide nav, footer scripts, expand/collapse UI
- Force one shot per page (or two if compact)
- Ensure text overlays render legibly
- Use black-on-white where brand colors won't print well
The user should be able to hit Cmd-P / Ctrl-P and get a clean PDF.
Hard rules
Rule 1. Single file, no exceptions
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.
Rule 2. No external dependencies at runtime
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.
Rule 3. Print must work
Hit Cmd-P. The result should be a clean PDF. If layout breaks across page boundaries, the print stylesheet is broken.
Rule 4. Brand-aware but quiet
Use brand colors as accents, not as full backgrounds. The reviewer's job is to read the storyboard, not admire the design. Subtle.
Rule 5. Mobile-readable
Stakeholders open links on phones. The HTML should be readable on mobile without horizontal scroll. Simple responsive CSS.
Templates
templates/preview.html.tpl, the structural templatetemplates/styles.css.tpl, the CSS to inlinetemplates/print.css.tpl, the print rules
The skill reads all three and assembles them into a single preview.html.
Quality bar
Before declaring done, verify:
- [ ] File opens in any browser (Chrome, Safari, Firefox) with no errors
- [ ] No external network requests fire on load
- [ ] Print preview produces a clean PDF
- [ ] Mobile viewport (375px) renders without horizontal scroll
- [ ] Brand colors appear (palette references work)
- [ ] Every shot from
shots.jsonis present - [ ] Every text overlay from
text-overlays.jsonis rendered - [ ] Brand-lock snapshot reference appears in footer
- [ ] Audit timestamp appears
Examples
examples/ contains generated preview.html files for the storyboard-architect example projects. Open them in a browser to calibrate quality.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: whystrohm
- Source: whystrohm/shotkit
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.