brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
render-photo-grid-cardRender 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 assembl…
Independent GitHub snapshot · Automated classification · Original documentation governs
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.
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.
cols), NOT total tiles; the grid fills row-major.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.