Install any skill in seconds. Free to start, no credit card required.
Get Started Free →hassancs91/fake-screencast
Turn static SCREENSHOTS into a simulated screen recording (TSX) — a fake screencast with an animated cursor that eases to targets and clicks, a browser URL bar that updates per page, hard-cut navigations, in-page filter crossfades, smooth scroll, and a ken-burns zoom onto the payoff.
Passed 24 of 25 test cases with the skill, and 6 of 25 without it.
and 25 more in the full report
18 fixed6 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 18 test cases the skill fixed. Same model, same prompt, with and without the skill.
After updating `timeline.json` and verifying preview frames for our browser recording beat, what script command executes the final video composition bake?
| Checked | Without skill | With skill |
|---|---|---|
| Executes python tools/bake.py to bake the composited video. | Missed | Passed |
The instructions your model reads when the skill loads.
Make a screenshot walkthrough look like a real screen recording: persistent browser chrome with a URL bar that changes per page, a custom cursor that eases along a bezier path to each click target and ripples on click, page navigation as a hard cut (URL path changes), an in-page filter as a short crossfade (URL query changes), smooth scroll, a slow ken-burns zoom onto the payoff element, and a constant drift so it never looks like a slideshow. TSX-first: controllable, re-renderable, reusable across videos.
This is a beat-building technique inside make-tsx (step 2). Use make-tsx for the timeline.json / render / bake mechanics and the sync-to-words principles; use vidtsx-2d-generator for the low-level rules that keep a Remotion file from crashing (frame-based only, monotonic interpolate, Easing.bezier, no useState/useEffect). The shot you write here follows those rules.
pending_recording placeholder slot until it lands (see make-tsx).WebBrowserFrame from lib/browser.tsx directly. Don't reach for the screencast machinery.Tell the user the exact shot list you need (one screenshot per page or state the cursor lands on), then wait for them. Requirements:
Save them to media/library/images/<service>/ with clear names (account-home.png, workers-ai.png, models-all.png, models-flux.png). Reference in a page as library/images/<service>/<name>.png (that's the staticFile-relative path the component expects).
remotion/src/lib/screencast.tsx)<Screencast pages cursor clicks box glow favicon appearAt />. Coordinates are FRACTIONS so they survive any resize:
x/y and click ripples → VIEWPORT fraction (0..1 of the page area under the URL bar).fx/fy → IMAGE fraction (transform-origin of the push).import { Screencast, ScreencastPage, CursorKey } from '../../lib/screencast';
const PAGES: ScreencastPage[] = [
{ img: 'library/images/svc/home.png', url: 'app.svc.com/…/home', tabTitle: 'Home | Svc', enterAt: 0 },
{ img: 'library/images/svc/list.png', url: 'app.svc.com/…/items', tabTitle: 'Items | Svc', enterAt: 130, transition: 'cut' }, // navigation → hard cut + new path
{ img: 'library/images/svc/filtered.png', url: 'app.svc.com/…/items?q=x', tabTitle: 'Items | Svc', enterAt: 262, transition: 'crossfade', transitionFrames: 5, // in-page filter → crossfade + same path + query
drift: 0.01, zoom: { from: 1.0, to: 1.4, fx: 0.32, fy: 0.52, range: [266, 289] } }, // ken-burns onto the payoff card
];
const CURSOR: CursorKey[] = [ // {frame, x, y} in viewport fractions; eased per segment
test cases passed, vs 6 / 25 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.