Skip to content
Marketing
Skill

/render-model-comparison-grid

Render a 'model comparison grid' video from a config — a fal-style "same prompt, N contenders" showcase — a dark real-DOM stage where per beat a monospace prompt fades in centered, docks to a small top strip, then a labeled 2-4 panel grid (static images OR muted video clips,

From plugin
goose-skills
1.3k181 skills

Claude Code

$ npx -y skills add gooseworks-ai/goose-skills --skill render-model-comparison-grid --agent claude-code

SKILL.md

render-model-comparison-grid.SKILL.md
name: render-model-comparison-grid
description: Render a 'model comparison grid' video from a config — a fal-style "same prompt, N contenders" showcase — a dark real-DOM stage where per beat a monospace prompt fades in centered, docks to a small top strip, then a labeled 2-4 panel grid (static images OR muted video clips, mixable per cell) staggers in and holds for comparison, plus a minimal end card — frame-stepped via Playwright (video cells are frame-seeked deterministically) and encoded with FFmpeg. Deterministic assembly, FREE (cell media comes from create-image-fal / create-video-fal, music from create-music-elevenlabs), text stays pixel-crisp. Use for the model-comparison-grid format.
status: active

render-model-comparison-grid

Render the 'model comparison grid' format from a config. The signature of this format is a **"Same prompt. N models."** gauntlet: a dark stage where, per beat, a `PROMPT` eyebrow + the (condensed) prompt **fades in** centered in monospace and holds readable ~0.8s, then docks to a small top strip while a **grid of 2-4 labeled panels** staggers in (0.15s apart) and holds for side-by-side comparison. A persistent model/variant label sits under each panel; column order is identical on every beat. Ends on a minimal end card (headline + column names only — **no meta-stats line**).

The grid is **media-agnostic per cell**: any cell is a static image or a **muted video clip** (i2v outputs, screen recordings), mixable within one beat. Video cells loop during the hold and are **frame-seeked deterministically** (the renderer awaits each seek), so the render never depends on wall-clock playback timing.

The renderer itself is FREE/deterministic (Playwright frame-step + FFmpeg). The paid inputs are separate capabilities: the cell **images** come from `create-image-fal`, the cell **clips** from `create-video-fal`, and the **music bed** from `create-music-elevenlabs`. Prompt text and labels are real DOM — never AI-rendered.

Default shape: 5 beats × 4.5s + 2.5s end card = 25.0s @ 1280×720/30fps, all configurable from one `config.json`.

Run

build_composition.py --config config.json --output hyperframe.html ; render_seekable_hyperframe.py hyperframe.html master-silent.mp4 <duration> --fps 30 --width 1280 --height 720 — dark stage, staggered grid, deterministic, no paid calls. The config schema is documented at the top of `scripts/build_composition.py`; `scripts/config.example.json` IS the shipped worked example (re-point the cell paths at your own media; its contenders, beat axes, prompts, end-card copy and music prompt are the demo's — the recipe's user choices supply yours, never copy them as defaults).

`build_composition.py` validates every cell path and the column count (2-4), infers each cell's media type from its extension (`.png/.jpg/.jpeg/.webp` → image; `.mp4/.mov/.webm/.m4v` → muted video), and emits a self-contained HTML that exposes `window.mediaReady()` + `window.renderAt(t)`. `render_seekable_hyperframe.py` awaits both, so `<video>` cells seek to the right frame before each screenshot — never a frozen first frame.

Contract

  • Deterministic + FREE (Playwright frame-step + FFmpeg); no paid calls in this capability.
  • Columns = panels-per-beat (2-4); every beat supplies exactly that many cells, same order.
  • The template recipe (DB) supplies the config; cell images/clips + music are separate

capabilities.

  • State is computed entirely in `renderAt(t)` — never CSS `animation-delay`/transitions

(Playwright scrubbing traps delayed animations in pre-state).

  • Video cells must decode in the render Chromium (H.264 yes, ProRes no — transcode `.mov`

ProRes to H.264 first). An images-only grid has no decode dependency.

Read more
@gooseworks-ai
Ships withgoose-skills

Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.

1.3k181 skills
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.3k
Star history of gooseworks-ai/goose-skills on GitHub, a chart by star-history.com

Other skills on goose-skills.

goose-ads

goose-ads

Edit, resize, animate and study image ads with GooseWorks in this chat. New static or image ads go to the make-static-ads skill…

goose-video

goose-video

Make a video ad in this chat from a real reference ad, found or theirs; styles are the fallback. Follow every answer's next_step.

gooseworks

gooseworks

GooseWorks growth coworker and router for markets, competitors, audiences, creators, campaigns, ads, photos, graphics, video,…

More skills from other plugins.

seo

seo

Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…

@agricidaniel@agricidanielInstall Skill
brag

brag

Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…

brag2w21k
@latent-spaces@latent-spacesInstall Skill
geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

Questions about render-model-comparison-grid.

Which coding agents can use render-model-comparison-grid?
render-model-comparison-grid installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.