{"slug":"render-proof-points-overlay","title":"render-proof-points-overlay","summary":"Build the deterministic PIL pill overlays for a 'perfect-score + proof-points' UGC video ad (white 10/10 score header with a medal + orange sub with a finger-down + 3-4 green-check proof pills) and composite them onto a base clip in a diagonal L->R->L->R cascade, then mux the mus","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-11T17:23:10.968091Z","repo":{"url":"https://github.com/gooseworks-ai/goose-skills","stars":1222,"forks":208,"license":"MIT","updatedAt":"2026-09-22T18:53:29Z"},"bodyHtml":"<hr>\n<h2>name: render-proof-points-overlay\ndescription: Build the deterministic PIL pill overlays for a 'perfect-score + proof-points' UGC video ad (white 10/10 score header with a medal + orange sub with a finger-down + 3-4 green-check proof pills) and composite them onto a base clip in a diagonal L-&gt;R-&gt;L-&gt;R cascade, then mux the music bed into master-final.mp4. Config-driven (config.json), 1080x1920 9:16, FREE and deterministic (no paid calls, text stays pixel-crisp). Use for the overlay-proof-points format; the base clip + music come from separate paid capabilities.\nstatus: active</h2>\n<h1>render-proof-points-overlay</h1>\n<p>Build the deterministic PIL/FFmpeg overlays for the \"Instagram comparison-tool reviewer\" UGC ad — a white \"we got a perfect 10/10 score\" headline pill (trailing medal), an orange \"but here's also why you'll love us\" sub pill (trailing finger-down, width-matched to the header), and 3-4 green-check proof pills — then composite them onto a base clip in the format's signature diagonal cascade and mux the music into the master. FREE and deterministic: the pills are PIL-rendered so the score, checks, and wordmark stay pixel-crisp (a video model would smear type). The base clip (create-image-fal keyframe -&gt; create-video-fal i2v) and the music bed (create-music-elevenlabs) come from separate paid capabilities; this one only does the free rendering.</p>\n<h2>Run</h2>\n<p>fetch_icons.py --run-dir </p>\n<h2>Scripts</h2>\n<ul>\n<li><code>fetch_icons.py</code> — downloads the three Twemoji PNGs (medal 1f3c5, finger-down 1f447, check 2705) to <code>&lt;run&gt;/assets/icons</code>. PIL cannot render Apple Color Emoji, so pills paste Twemoji PNGs. Free, local.</li>\n<li><code>build_overlays.py</code> — PIL: renders the white score header (trailing medal), the orange subhead (trailing finger-down, width-matched to the header), and N green-check proof pills auto-sized to their copy. Bold weight and icon-centered-on-pill-middle are load-bearing.</li>\n<li><code>compose_master.py</code> — FFmpeg: scale/crop the base clip to 1080x1920@30, composite the always-on headers, cascade the proof pills (each <code>enable='gte(t,T)'</code> on its own alternating LEFT/RIGHT row), mux the music, apply the anti-AI grain pass, re-encode crf23/maxrate12M -&gt; master-final.mp4.</li>\n</ul>\n<h2>Contract</h2>\n<ul>\n<li>Deterministic + FREE (PIL + FFmpeg); no paid calls, no AI-rendered text — the score, checks, and wordmark are composited, never generated.</li>\n<li>Config-driven off one <code>config.json</code> (<code>overlays</code>, <code>layout</code>, <code>duration_sec</code>, optional <code>music</code>/<code>post_production</code>); the template recipe supplies the config from <code>recipe.config</code>.</li>\n<li>Always re-run <code>build_overlays.py</code> before <code>compose_master.py</code> — the compositor reads pre-rendered PNGs and silently reuses stale ones on a copy change.</li>\n<li>Headers stay on 0-duration and must not cover the bottle face; proof pills cascade one-per-beat down the diagonal (NOT four-corners) — the cascade is the format's signature.</li>\n<li>Requires <code>Pillow</code> + <code>ffmpeg</code>. No API keys.</li>\n</ul>\n","files":[{"path":"scripts/build_overlays.py","sizeBytes":6821,"isText":true},{"path":"scripts/compose_master.py","sizeBytes":4432,"isText":true},{"path":"scripts/fetch_icons.py","sizeBytes":1114,"isText":true},{"path":"SKILL.md","sizeBytes":3228,"isText":true},{"path":"skill.meta.json","sizeBytes":331,"isText":true},{"path":"tests/smoke-test.md","sizeBytes":686,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-11T17:24:02.592986Z","sha256":"D213EF729E192B2F2825A9F48419B927974AF5F5155A8CD4064CAC2E16B7CB0A","sizeBytes":7818},"review":null,"source":{"repositoryUrl":"https://github.com/gooseworks-ai/goose-skills","path":"skills/ads/capabilities/render-proof-points-overlay","license":"MIT","commit":"a9f4676e266f9f04786e3f4145baf931f61fc309","subtreeSha":"438744A856D3C41F02D66321F6EC7123883D8297C7A57DD597BD6BE4F97B77CE","lastSyncedAt":"2026-09-24T06:48:52.524221Z"},"reviewedAt":"2026-09-11T17:25:52.741359Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-proof-points-overlay"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install gooseworks-ai-goose-skills@llmmart"},{"target":"git","command":"git clone https://github.com/gooseworks-ai/goose-skills.git"}]}