Video
![]()
![]()
Editorial hero for a report




A festival-style hero with a sprocketed film strip of stills gliding across the bottom, dates and a ticket button.
$9.99once, yours to keep
Payments are non-refundable. See our Terms of service.
Yours. Download it, then add it to your agent.
Builds a hero with a moving film strip of stills into your own project: near-black hero; top left the festival dates in amber, a huge headline and two buttons; across the bottom a full-width film strip with sprocket holes carries eight stills, each with a title on a dark band, gliding left; hover or Pause motion stops it. Plain HTML, CSS and JavaScript, or matched to React, Next.js, Vue, Svelte, Astro or Tailwind when the project uses them. Comes with a working reference and a check that screenshots it at phone, tablet and desktop widths and flags sideways overflow, text under 12px, missing alt text and names, low contrast, no focus styles, motion that ignores reduced motion, leftover sample words and emoji icons. Use when a film festival, cinema, video studio, production company or photography event wants a cinematic hero, or someone asks for a film strip, reel or cinema-style hero.
By RecaplyUpdated 12 Nov
Video
![]()
![]()
Editorial hero for a report
Video1 view, 0 downloads
![]()
![]()
Lavender page for an AI app
Video
![]()
![]()
Product page for headphones
Video
![]()
![]()
Page with a node-flow hero
You say
Hero with a moving film strip for our wedding videography studio. Copy in brief.md.
It said back
I've built the hero as plain HTML, CSS and JS in index.html, style.css and script.js. The strip uses placeholder frames because the 10 stills weren't in the project folder.
The automated check passes. It covers overflow at 390, 768 and 1440 px, text size, names, contrast, focus styles, reduced motion and script errors. I looked at the 390 and 1440 screenshots: nothing is cut off and the layout holds on both. I didn't open the 768 one.
What it did in run 1
<svg viewBox="0 0 400 250" aria-hidden="true" focusable="false" preserveAspectRatio="xMidYMid slice"><rect width="400" height="250" fill="${a}"/><circle cx="${cx}" cy="80" r="${26+(i%3)*8}" fill="${b}" opacity=".55"/><path d="M0 170 q50 -${10+i*2} 100 0 t100 0 t100 0 t100 0 V250 H0z" fill="${b}" opacity=".35"/><path d="M0 205 q50 -12 100 0 t100 0 t100 0 t100 0 V250 H0z" fill="#0F0E0C" opacity=".6"/></svg>; return <li${hidden?' aria-hidden="true"':''}><a class="fs-f" href="#films"${hidden?' tabindex="-1"':''}>${svg}<span>Wedding film ${n}</span></a></li>; }; const a = Array.from({length:10},(_,i)=>frame(i,false)).join('\n '); const b = Array.from({length:10},(_,i)=>frame(i,true)).join('\n '); fs.writeFileSync(out+'/index.html', <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Silverline Films | Wedding videography</title> <meta name="description" content="Two filmmakers, a 10-minute film and a 90-second trailer within six weeks of your wedding."> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600&display=swap"> <link rel="stylesheet" href="style.css"> </head> <body> <a class="skip" href="#main">Skip to content</a> <div class="hero fs"> <header class="hbar wrap"> <a class="brand" href="#main">Silverline Films</a> <a class="btn btn-primary" href="#dates">Check our dates</a> </header> <main id="main"> <div class="wrap fs-in"> <p class="h-kick">Wedding videography</p> <h1>Your day, filmed like a feature</h1> <p class="h-lede">Two filmmakers, a 10-minute film and a 90-second trailer within six weeks.</p> <div class="h-acts"> <a class="btn btn-primary" href="#dates">Check our dates</a> <a class="btn btn-ghost" href="#films">Watch a full film</a> </div> </div> <!-- PLACEHOLDER frames: replace each <svg> with <img src="..." alt="..."> of a real still, and the span with the couple's film title. Keep the second (aria-hidden) list identical to the first. --> <div class="fs-strip" role="region" aria-label="Stills from our wedding films" tabindex="0"> <ul class="fs-reel"> ${a} ${b} </ul> </div> </main> <button class="hpause" type="button" data-hero-pause>Pause motion</button> </div> <script src="script.js" defer></script> </body> </html> ); let css = fs.readFileSync(ref+'/style.css','utf8'); css = css.replace('--accent:#F2A93B;--on-accent:#1A1205;--em:#F7C46C;','--accent:#E2C285;--accent-hover:#F0DAA8;--on-accent:#17120A;--em:#EBD3A0;') .replace('--bg:#0F0E0C','--bg:#0C0B0A').replace('--ink:#F7F2EA','--ink:#F6F0E2'); css = css.replace('.fs-f img','.fs-f img').replace('.fs-f svg{width:100%;height:100%}','.fs-f svg,.fs-f img{width:100%;height:100%;object-fit:cover}'); fs.writeFileSync(out+'/style.css', css); fs.copyFileSync(ref+'/script.js', out+'/script.js'); EOF cd . && node /tmp/gen/gen.mjs . .claude/skills/cinema-reel-hero/reference && node .claude/skills/cinema-reel-hero/scripts/check.mjs index.html --out check 2>&1 | tail -40No. Cinema Reel Hero costs $9.99 once and stays in your Recaply account, or it comes with the Recaply plan ($19.99 a month), which opens every premium skill and prompt.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.
A ZIP of the whole skill folder (34 KB): the SKILL.md your agent follows and its 6 other files, the references, templates and scripts it uses. You download it from this page whenever you need it, and install it in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. The Recaply plan opens it too, with every other premium skill and prompt.
Buy it, then download the ZIP from this page. For Claude Code, unzip it into .claude/skills/ in your project. For Codex, Cursor and Gemini CLI, unzip it and run npx skills add ./cinema-reel-hero with your agent's flag.
One HTML file with its CSS inside: no build step, no framework. A hero with a moving film strip of stills. Checked at phone and desktop widths.
Node 20+ and Chrome, and no API key. Each use costs nothing beyond your agent.
7 files, about 28,513 tokens in all. The SKILL.md is about 2,201 tokens, and your agent reads it only when the job fits.
Our 1 runs took 1 min to 1 min and $0.25 to $0.25 of API use each, in Claude Code with claude-sonnet-5-5. On a Claude plan, a run counts toward your usage instead.
Type /cinema-reel-hero first to make sure it loads. Without it, Claude Code may judge a small job simple enough to do without the skill.