Skip to content
Back to skills

Render Photo Grid Card

ASecurity

Render a 'photo-grid promo card' video from a config — a real-DOM card with a FIXED header/footer and a CONTINUOUSLY SCROLLING 2-row grid of MIXED tiles (video clips, product/lifestyle stills, big-serif %-OFF, dark promo-code or CTA) + feature chips, frame-stepped via Playwright with real-time <video> playback and encoded with FFmpeg — deterministic assembly, FREE (the clips + music come from create-video-fal + create-music-elevenlabs), text stays pixel-crisp. Use for the photo-grid-promo-car...

  • 1,232 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 4, 2026
ai-agents

Works with

  • cli

Security analysis

A100/100

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

Scanned September 29, 2026

npx -y skills add gooseworks-ai/goose-skills --skill render-photo-grid-card --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Render Photo Grid Card?

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

Security grade badge for Render Photo Grid Card
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gooseworks-ai-render-photo-grid-card/badge)](https://www.skillsdirectory.com/skills/gooseworks-ai-render-photo-grid-card)

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-photo-grid-card
description: Render a 'photo-grid promo card' video from a config — a real-DOM card with a FIXED header/footer and a CONTINUOUSLY SCROLLING 2-row grid of MIXED tiles (video clips, product/lifestyle stills, big-serif %-OFF, dark promo-code or CTA) + feature chips, frame-stepped via Playwright with real-time <video> playback and encoded with FFmpeg — deterministic assembly, FREE (the clips + music come from create-video-fal + create-music-elevenlabs), text stays pixel-crisp. Use for the photo-grid-promo-card format.
status: active
---

# render-photo-grid-card

Render the 'photo-grid promo card' format from a config. The signature of this format is a
**continuously scrolling 2-row grid** (NOT a static card) under a fixed header (brand
wordmark + big headline + sub) and fixed feature chips. The grid-viewport scrolls left
across the whole ~10s, edge-faded with a CSS mask, and its tiles are **mixed media**:
`video` clips playing inside tiles, `band-product`/`photo` stills, big-serif `pct`/`off`
type tiles, and a dark `code` (promo code) or `cta` tile.

The renderer itself is FREE/deterministic (Playwright frame-step + FFmpeg). The paid inputs
are separate capabilities: the tile **clips** come from `create-video-fal` (i2v of the
product heroes, or clips extracted from the brand's own ad corpus) and the **music** from
`create-music-elevenlabs`. Text (wordmark, %, code) is real DOM — never AI-rendered.

## Run
build_card.py --config config.json --out hyperframe.html ; render.py --config config.json --html hyperframe.html --out master-silent.mp4 — 1080x1920, scrolling grid, deterministic, $0.

Clip tiles are driven by FRAME-SWAP, not `<video>`: `render.py` pre-extracts each clip to
PNG frames with ffmpeg, preloads them, and swaps each `<img class="vidframe">`'s src per
output frame. This is because Playwright's bundled Chromium can't decode `<video>` H.264
over file:// (open-source build, no proprietary codecs) — it hangs on `canplay`. Letting
ffmpeg decode makes it codec-independent AND deterministic. Provide clips longer than the
master (or the swap just loops them); a subtle `setpts`-slow reads as cinematic.

## Contract
- Deterministic + FREE (Playwright frame-step + FFmpeg); no paid calls in this capability.
- Tiles-per-row = grid columns (`cols`), NOT total tiles; the grid fills row-major.
- The template recipe (DB) supplies the config; clips + music are separate capabilities.
- `palette` is a brand fact — pass the brand kit's colors; `build_card.py` only falls back to neutral
  greys. The occasion copy, clip moments and music feel are the recipe's user choices, never defaulted.

Files in this skill

  • SKILL.md2.4 KB
  • scripts/_shared.js950 B
  • scripts/build_card.py10.6 KB
  • scripts/render.py4.6 KB
  • skill.meta.json321 B
  • tests/smoke-test.md641 B

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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.