Ship promo
Turns a project's changelog, shipping log, or user guide into a short promo-video PLAN — a brand-voiced voiceover script, a timed shotlist, and a storyboard outline written to docs/promo/. Reads docs/brand.json (colors + fonts) and docs/VERSION so the plan matches the current release, and emits ready-to-run prompts for whatever generator the user has (Ad Lab generate-* scripts, Directors Palette, or any local image/video tool) via adapters — nothing is assumed installed. Use when the user wants a promo video, launch teaser, demo reel, trailer, sizzle, social ad, "what's new" video, video script, voiceover script, shotlist, or storyboard for a release or feature. Triggers on "make a promo", "promo plan", "launch video", "teaser", "video script for this release", "storyboard the changelog".From its SKILL.md
npx -y skills add taskmasterpeace/ship-pack --skill ship-promoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.3 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Ship Promo
Purpose
Produce a short, benefit-first promo video plan from what the project just shipped. The
shipping log says what changed; the user guide says how it works; this skill says how to
SHOW it in 30–60 seconds. Output is three planning artifacts plus generator-ready prompts —
not a rendered video. Rendering is delegated to whatever tool the user already has, through
adapters (see references/generator-adapters.md). The skill never assumes a generator exists.
Part of the ship pack
One member of the cross-project "ship" toolkit, all sharing the docs/VERSION anchor:
docs/VERSION ← single source of truth (semver)
docs/brand.json ← brand-as-data (colors + fonts) — themes every output
├─ ship-changelog / shipping-log → docs/SHIPPING-LOG.md (WHAT shipped → promo source)
├─ ship-guide / user-guide-builder → docs/.../guide (HOW it works → promo claims)
├─ ship-screenshots / screenshot-capture → screenshots/ (real app frames for the storyboard)
├─ ship-logos / logo-pack → docs/brand/logos/ (brand mark for the end card)
└─ ship-promo (this) → docs/promo/ (script + shotlist + storyboard)
Source priority: the shipping log is the spine (it is already benefit-first). Pull supporting claims from the guide, and prefer real screenshots over generated frames whenever they exist — they are the most honest, on-brand footage available.
Workflow
-
Discover what already exists. Never act blind. From the repo root:
node "<skill-dir>/scripts/discover-promo.mjs" --prettyIt reports (as JSON):
docs/brand.json(parsed colors + fonts, or a flag if missing),docs/VERSION, the changelog / guide / screenshots / logos it found, any priordocs/promo/*outputs (so you update instead of clobber), and agapslist of missing inputs. Read it before writing anything. -
Choose the angle and length. Default is a 45-second "what's new" promo for the current
docs/VERSION. Honor the user's ask: a feature spotlight, a 15s social teaser, a 60s investor/launch sizzle, or a "since v0.x" range. Pick one spine message (the single thing a viewer should remember) and 3–5 proof beats that back it. More is worse. -
Gather evidence. Read the changelog/guide the discovery step found. Every claim in the script must trace to a shipped item — no invented features, no "AI-powered" filler. If the changelog is thin or absent, say so and offer to run
/ship-changelogfirst rather than padding with generic lines. -
Write the script + shotlist + storyboard. Follow
references/promo-format.mdexactly (structure, timing math, the beat taxonomy, and a full worked example). Produce three files underdocs/promo/— see Outputs. Keep the voiceover in the brand voice: benefit-first, second person, concrete, no hype words from the ban list. -
Attach generator prompts. For each shot, write a tool-agnostic image/video prompt into the shotlist, themed by
brand.jsoncolors. Then map them to the user's actual tools usingreferences/generator-adapters.md— emit a runnable command block per available adapter (Ad Lab, Directors Palette, local Ideogram/Wan, etc.). Mark adapters you could not confirm as "not detected — install or swap," and never fabricate a command for a tool that isn't there. -
Render the storyboard page (optional). If the user wants something to look at / share, build a self-contained
docs/promo/storyboard.htmlfromreferences/storyboard-template.md, themed frombrand.json. It must be a single file, no build step,:rootCSS variables only, never purple by default, and must NOT usebackdrop-filteror SVGfeTurbulence(both hang renderers). Embed real screenshots where they exist; use prompt text as placeholders where they don't. -
Report. State the angle, the length, the spine message, the files written, which generator adapters were detected, and the honest gaps (e.g. "no screenshots for the Finance shot — run
/ship-screenshots"). If you used a stale changelog, say so.
Outputs
All under the project's docs/promo/ (create it if absent — mkdir -p docs/promo):
| File | What it is |
|---|---|
docs/promo/voiceover.md | The spoken script: titled beats with timecodes, word counts, and an estimated read time at ~2.6 words/sec. Plain, speakable sentences. |
docs/promo/shotlist.md | A timed table — every shot's t_start–t_end, on-screen action, the VO line it carries, on-screen text/lower-third, and a generator prompt. The production spine. |
docs/promo/storyboard.md | Beat-by-beat outline: the narrative arc (hook → proof → payoff → CTA), pacing notes, music/energy curve, and which shots are real screenshots vs. generated. |
docs/promo/storyboard.html | (optional) A shareable, on-brand visual board of the above. |
Use the bundled estimator so timings are consistent, not guessed:
node "<skill-dir>/scripts/estimate-timing.mjs" docs/promo/voiceover.md
It returns per-beat word counts, read times (~2.6 wps), cumulative timecodes, and a total — and warns if the total overshoots the target length so you can trim before storyboarding.
Brand & theming
- Read
docs/brand.jsonforcolorsandfonts. Use them for any on-screen text spec, lower-thirds, end card, and the HTML board. Ifbrand.jsonis missing, fall back to the project's landing page / Tailwind config / logo, and say in your report that you inferred it. - Never default to purple/indigo. If the brand has an explicit "no purple" rule, honor it.
- The end card uses the brand wordmark/logo from
docs/brand/logos/if present, the tagline frombrand.json, and the brand accent for the CTA.
Quality bar
A promo plan passes only if every line is true:
- One spine message, 3–5 proof beats. If you can't name the single takeaway in a sentence, the plan fails. Cut everything that doesn't serve it.
- Every claim traces to a shipped item in the changelog or guide. No invented capabilities, no roadmap-as-fact, no implied security/compliance you can't cite.
- Benefit-first, second person, concrete. "Send a change order in two taps" beats "streamline your workflow." Show the noun (the actual feature), not the adjective.
- Banned filler: revolutionary, game-changing, seamless, robust, cutting-edge, unlock, supercharge, leverage, elevate, next-level, "AI-powered" as a standalone selling point. If a line still works with the word deleted, delete it.
- Timing is computed, not vibes. Word counts → read time → timecodes via the estimator; the total fits the target length (with ~10% headroom for breaths and music tails).
- Shotlist is shootable. Each shot says what's on screen, what's said, and how to make the frame (real screenshot path OR a specific, brand-colored generator prompt). No "show the app looking great."
- Honest about gaps. Missing screenshots, thin changelog, undetected generator — named in the report, not papered over.
Honest handling of missing inputs
- No changelog/guide → don't invent. Offer
/ship-changelogfirst; if the user insists, build only fromgit log+ README and label the plan "draft — claims unverified." - No brand.json → infer from landing page/logo, write a minimal one, note the inference.
- No screenshots → use prompt placeholders in the storyboard and flag the shots that would
be stronger with real frames (
/ship-screenshots). - No generator detected → still write the prompts; mark every adapter "not detected" and list what to install. The plan is useful even with zero generators present.
Reusable contents
scripts/discover-promo.mjs— inventories brand/version/changelog/guide/screenshots/logos/ prior promo outputs and reports gaps. Run first; don't reinvent.scripts/estimate-timing.mjs— word-count → read-time → timecode estimator for the script.references/promo-format.md— script/shotlist/storyboard structure, timing math, beat taxonomy, voice rules, and a full input→output worked example. Read before writing.references/generator-adapters.md— tool-agnostic prompt spec + per-tool command mappings (Ad Lab, Directors Palette, local image/video). Adapters, not assumptions.references/storyboard-template.md— the self-contained, themeablestoryboard.htmltemplate (no backdrop-filter, no feTurbulence, never purple) and how to fill it.
What ships with it: 5 files
30.4 KB alongside SKILL.md, 2 of them executable
references/
- generator-adapters.md4.6 KB
- promo-format.md8.5 KB
- storyboard-template.md6.5 KB
scripts/
- discover-promo.mjsruns5.8 KB
- estimate-timing.mjsruns5.0 KB