CtrlK
BlogDocsLog inGet started
Tessl Logo

render-photo-grid-card

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.

64

Quality

80%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./skills/ads/capabilities/render-photo-grid-card/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

76%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A dense, high-signal body that captures the format's signature, the non-obvious frame-swap design decision, and a clear two-command run path, all at excellent token efficiency. The main gaps are operational: no verification step after the batch render and script invocations that omit their scripts/ location and interpreter, which slightly blunt copy-paste executability.

Suggestions

Add a validation checkpoint after rendering, e.g. 'Verify: ffprobe master-silent.mp4 shows the expected duration and fps before considering the render done.'

Write the run commands with explicit paths and interpreter: 'python scripts/build_card.py --config config.json --out hyperframe.html' and 'python scripts/render.py ...'.

Include a minimal config.json snippet (or point to where the recipe DB supplies it) so tile types, cols/rows, and palette fields are concrete rather than implicit.

DimensionReasoningScore

Conciseness

The body is ~37 lean lines: format signature, the run commands, the non-obvious frame-swap rationale (Chromium can't decode H.264 over file://, hangs on canplay), and a contract list. Every fact is something Claude could not infer — nothing explains known concepts, no padding. This matches anchor 5 ('Lean and efficient; every token earns its place'); even the codec explanation is genuinely non-obvious and load-bearing.

5 / 5

Actionability

Concrete runnable commands are given with full flags and outputs ("build_card.py --config config.json --out hyperframe.html ; render.py --config config.json --html hyperframe.html --out master-silent.mp4") and both scripts exist in the bundle, matching anchor 4 ('mostly executable guidance... minor gaps'). Not 5 because the invocations omit interpreter/path context (python scripts/build_card.py) and no sample config or field list is shown, leaving the config schema implicit.

4 / 5

Workflow Clarity

The build-then-render sequence is present and ordered, plus the input constraint 'Provide clips longer than the master (or the swap just loops them)', but there are no validation checkpoints on a batch-style render (~10s of frame-stepped output). Per the guideline capping batch operations without validation at 3, this sits at anchor 3 ('sequence present but checkpoints missing or implicit') — the sequence itself is coherent, so not 2.

3 / 5

Progressive Disclosure

The ~37-line body is appropriately self-contained with well-marked sections (signature, ## Run, ## Contract) and correctly leaves tile/music generation to sibling capabilities — the under-50-lines exception applies. Scored 4 rather than 5 because the scripts build_card.py, render.py (and _shared.js) are referenced by bare filename without signaling they live in scripts/, a minor organization gap matching anchor 4.

4 / 5

Total

16

/

20

Passed

Description

76%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description is exceptionally concrete and clearly delineates this capability from its paid siblings, but it is weak on trigger breadth: activation depends almost entirely on the exact 'photo-grid-promo-card' slug. It also claims "real-time <video> playback" while the body and scripts state clips are frame-swapped PNGs precisely because <video> does not work — an internal inaccuracy.

Suggestions

Add natural trigger synonyms beyond the single format slug, e.g. 'Use when the user asks for a photo-grid promo card, scrolling promo-grid video, or product ad in the grid-card style.'

Correct the inaccuracy 'real-time <video> playback' — the body states clips are frame-swapped PNGs because Chromium cannot decode H.264 over file://, so the description over-claims.

Trim low-signal parenthetical detail (e.g. the big-serif %-OFF and dark promo-code enumerations) so the description stays scannable while keeping the trigger phrases.

DimensionReasoningScore

Specificity

The description enumerates multiple concrete actions and outputs: "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", "frame-stepped via Playwright", "encoded with FFmpeg", covering tile types, tooling, and cost model comprehensively. This matches the anchor 'Lists multiple specific concrete actions; comprehensive coverage' — not 4, since there are no meaningful coverage gaps in what the capability does.

5 / 5

Completeness

The 'what' is thoroughly explicit (render, scroll, frame-step, encode) and a 'when' clause exists ("Use for the photo-grid-promo-card format"). This matches anchor 4 ('Has both what and when; when could be more explicit or specific') — the trigger is a single narrow format name rather than the concrete multi-condition triggers of anchor 5.

4 / 5

Trigger Term Quality

Relevant keywords exist ("photo-grid promo card", "promo-code", "CTA", "video", "config") but the only real trigger phrase is "Use for the photo-grid-promo-card format", a single format slug. This matches anchor 3 ('Some relevant keywords but missing common variations or synonyms') — it lacks natural variations a user might say ("promo video", "product ad", "grid video", "scrolling card"), so not 4.

3 / 5

Distinctiveness Conflict Risk

A highly specific niche format name plus explicit boundaries against sibling capabilities ("the clips + music come from create-video-fal + create-music-elevenlabs", "no paid calls in this capability") gives clear distinct triggers with minimal conflict risk, matching anchor 5. It is more self-delineating than anchor 4's 'minor overlap risk with closely related skills'.

5 / 5

Total

17

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository
gooseworks-ai/goose-skills
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.