Skip to content
Back to skills

Render Value Prop

ASecurity

Render a designed 'value prop' video from a config — 3-5 noun-phrase benefit claims (<=4 words each) revealed sequentially over per-SKU product visuals, one crisp editorial frame per claim (hook sticker -> N claim beats -> brand end card). Deterministic PIL/HTML beat renderer frame-stepped via Playwright and encoded with FFmpeg, sound-off legible, hard cuts, uniform pacing. FREE (no paid calls); music is added separately (create-music-elevenlabs). Use for the value-prop format.

  • 1,232 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 4, 2026
ai-agentspythongo

Works with

  • cli

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add gooseworks-ai/goose-skills --skill render-value-prop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Render Value Prop?

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

Security grade badge for Render Value Prop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gooseworks-ai-render-value-prop/badge)](https://www.skillsdirectory.com/skills/gooseworks-ai-render-value-prop)

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: render-value-prop
description: Render a designed 'value prop' video from a config — 3-5 noun-phrase benefit claims (<=4 words each) revealed sequentially over per-SKU product visuals, one crisp editorial frame per claim (hook sticker -> N claim beats -> brand end card). Deterministic PIL/HTML beat renderer frame-stepped via Playwright and encoded with FFmpeg, sound-off legible, hard cuts, uniform pacing. FREE (no paid calls); music is added separately (create-music-elevenlabs). Use for the value-prop format.
status: active
---

# render-value-prop

Render a designed 'value prop' video from a config: a hook sticker, then one beat per short noun-phrase benefit claim (<=4 words each — "Drug-Free", "Zero Sugar", "NSF Certified"), each pairing the claim headline with a per-SKU product visual (the hero SKU rotates beat to beat so the eye anchor shifts), then a brand-wordmark end card. Text + product carry the spot — no narration, no talking head — and it is built to be legible sound-off. Every beat is a pure function of beat-local time `t` (deterministic PIL start frames + Playwright hyperframes + FFmpeg); no CSS keyframes, no setTimeout. FREE (no paid calls); music is a separate capability (create-music-elevenlabs), or ship silent for $0.

## Run
`render_master.py --config config.json --project <dir>` -> `<dir>/finals/master-clean.mp4` (silent),
1080x1920, deterministic, $0. The renderer is **fully config-driven** — palette, copy, SKUs,
pacing, hook, logo and end card all come from `config.json` (schema = `ad_sample.recipe.config`;
see `config.example.json`). Nothing is hardcoded to one brand. `build_storyboard_preview.py` is an
optional free preview gallery for the gate; `build_text_overlays.py` is optional (transparent
text-zone PNGs for compositing claims over a motion clip). Both preview scripts take their ink,
background, brand name and logo from `shot-list.yml` `project:` or the project's `config.json`
(neutral fallbacks otherwise). `shared/beat-templates/` are reference layouts with placeholder copy;
the renderer does not read them.

## Choices

The value-prop recipe asks these of the user; this capability renders whatever the config says.

- `music` — the bed under the claims, or silent (sets `music_brief`, consumed by
  create-music-elevenlabs, not this renderer). Asked of the user; the demo used calm ambient
  sleep music.
- `background` — what the claims sit on (sets `palette.bg`). Asked of the user; the demo used
  white with a navy headline. `palette.ink` comes from the brand kit.

Environment: run with a **Python that has Playwright** (override the frame-render interpreter with
`RENDER_PYTHON`); `ffmpeg` is auto-discovered (`FFMPEG` env > PATH > common prefixes). The frame
renderer `render_hyperframe.py` is **bundled** in `scripts/` — no external atom to fetch.

## Contract
- Deterministic + FREE (Playwright frame-step + FFmpeg); no paid calls, no AI-rendered text.
- Claims are noun phrases, <=4 words; never <3, never >5. Optional benefit sentence <=12 words.
- One product visual per beat; rotate which SKU is the hero. Never reuse a flat variety-pack image as every canvas.
- Sound-off legibility is the bar: the headline uses the config `palette.ink` color on `palette.bg`;
  the per-beat **accent** color (from `value_props[].accent` — a SKU-accent slug or a hex) is the
  accent rule, not the headline.
- Product widths **auto-scale from each image's aspect ratio** (target display height), so tall
  sachet cutouts and wide product packshots both frame correctly.
- Assets are packshots, not always transparent cutouts: set `palette.bg` to the product image's
  background color for seamless compositing (free — avoids a paid background-removal step).
- Uniform pacing (hook ~3.0s, props 2.0-2.5s each, endcard ~2.0s); total lands in the 10-20s window (~17s). No acceleration curve.
- No human face is the focus. End card uses the brand wordmark **image** when a hi-res one
  (aspect >= ~1.2, i.e. a real >=1200x600 wordmark) is provided via `config.logo`; otherwise it
  **falls back to a typographic `brand_name` wordmark** (many brands ship only a favicon).
- Music is added separately by create-music-elevenlabs (quiet instrumental bed at -14 dB), or ship silent.

Files in this skill

  • SKILL.md3.5 KB
  • scripts/build_storyboard_preview.py10.9 KB
  • scripts/build_text_overlays.py6.6 KB
  • scripts/config.example.json1.9 KB
  • scripts/render_hyperframe.py4.5 KB
  • scripts/render_master.py17.5 KB
  • shared/_shared.css4.7 KB
  • shared/_shared.js2.5 KB
  • shared/animations/registry.yml4.2 KB
  • shared/animations/sachet-entrance/cascade-from-top.js980 B
  • shared/animations/sachet-entrance/fade-stagger.js1013 B
  • shared/animations/sachet-entrance/slide-in-lateral.js1.2 KB
  • shared/animations/sachet-entrance/springScale-pop.js883 B
  • shared/animations/sachet-entrance/tilt-fan.js1.1 KB
  • shared/animations/text-entrance/fade-stagger.js1.3 KB
  • shared/animations/text-entrance/mask-reveal.js1.1 KB
  • shared/animations/text-entrance/type-on.js1.3 KB
  • shared/animations/text-entrance/word-by-word.js1.9 KB
  • shared/beat-templates/endcard-wordmark.html1.9 KB
  • shared/beat-templates/hook-sticker.html2.4 KB

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…