Skip to content
Back to blog
Five off-white motion states run along a path, with a black evidence gate holding the third state.
Written by
Zinian
Published on
August 5, 2026
Read time
8 min read

Frontend

A Screenshot Is Almost the Least Useful Evidence for Rebuilding Web Motion

Motion Replication Kit turns motion recreation from parameter guessing into an evidence chain with time, explicit inference boundaries, reduced-motion checks, and performance verification.

The first version of Motion Replication Kit treated the problem a little like spot the difference.

Capture the initial page. Scroll. Capture it again. Put the two images next to each other. The heading moved up, the cards appeared, and the background changed position. That looked like enough evidence to start guessing opacity, translateY, and a plausible duration.

It was enough evidence for two poses.

It said almost nothing about the part in between. Did the element settle in 300 milliseconds, or was it coupled to scroll progress? Did opacity change before movement? Were five cards simultaneous or staggered? Was that final position the end of an animation, or was the whole section pinned there?

A recreation can match both endpoints and still feel completely wrong in motion. It feels a little like trying to remake a film from two stills.

The judgment behind the kit became much simpler after that: motion replication is an evidence problem before it is a GSAP, CSS, or Motion problem.

Put time back into the third frame

The early capture flow kept initial.png and scrolled.png. Those files were useful. They answered spatial questions: what was visible before scrolling, where an element ended up, and whether the page shifted in an obvious way.

The project's own early PRD also recorded the boundary. Two fixed states could not explain scrubbed, pinned, or multi-stage scroll behavior. A screenshot could not expose duration or easing at all.

The next version did not search for a smarter screenshot. It separated the evidence.

The current default samples five points across the scroll distance and saves a filmstrip. A Playwright trace preserves what happened in the browser. Video can retain continuous feel when the filmstrip leaves a gap. The original before-and-after images remain for compatibility and fast spatial comparison.

These artifacts are not redundant copies of the same truth.

Screenshots preserve space. A filmstrip preserves order. Video preserves continuity. A trace lets me return to browser events and timelines when the visual result is ambiguous. They overlap, but no single one explains the motion on its own.

This is why I am skeptical of the claim that an agent can recreate web motion from one reference image. It may produce a reasonable entrance animation. Reasonable is not the same as observed, and neither is the same as verified.

Every inference needs a way back

More frames still do not justify generating code immediately.

At each sample, the kit records candidate positions, dimensions, opacity, and transforms. It also inspects transitions, animations, native scroll timelines, and timing data exposed through the Web Animations API: duration, delay, easing, play state, and timeline type. A pure Node inference layer then turns the samples into candidate explanations such as fade-up, slide-in, scale-in, or a possible stagger group.

The important design choice is not how many patterns the tool can name. It is the suffix attached to every inferred field in the draft brief: (inferred — verify).

I want that phrase to remain slightly annoying.

Timing returned by the browser is an observation. Movement calculated from five rectangles is an inference. A class name containing motion is only a clue. Flatten those categories into one confident result and the next agent starts precise implementation on top of a guess.

I would rather preserve an empty field than manufacture a convincing number. Guessing a duration badly may only damage the feel. Mistaking scroll-linked behavior for a one-shot reveal changes the entire interaction.

Map the behavior onto owned components

A stronger evidence trail creates another temptation. If the reference page is already open, why not take its CSS, structure, and assets too?

The kit draws the boundary in the opposite place. A captured page is untrusted evidence. Its motion behavior can be studied. Its copy, imagery, brand assets, routes, and page structure cannot be copied. The rebuild uses neutral names and local data attributes, then maps the observed behavior onto components owned by the target project.

This constraint forces a better question: what behavior does the new project actually need to preserve?

A simple viewport reveal may need only CSS transitions and IntersectionObserver. Scroll progress without JavaScript can use native scroll-driven animation as progressive enhancement. GSAP and ScrollTrigger become justified when the evidence shows a real timeline, pin, scrub, or complex sequence.

A more capable technique is not automatically a more faithful one. Turning a 200-millisecond fade into a scrubbed master timeline only makes a small behavior more expensive to maintain.

The kit therefore does not translate "GSAP detected" into "install GSAP." A detected library is evidence about the source, not an implementation order. The final choice depends on behavior complexity, existing target dependencies, browser support, and the reduced-motion path.

Run the page again with reduced motion

Many recreation attempts stop when the default animation looks close. The kit keeps the work going a little longer.

Every animation needs a prefers-reduced-motion branch. Setting duration to zero is not sufficient if opacity or transforms leave the content hidden. Reduced mode must preserve the final visible state.

Capture can run a second reduced-motion pass. The comparison tool classifies the reference as honoring, ignoring, mixing, or providing insufficient evidence for the preference. That comparison intentionally reasons over JSON activity signals rather than decoding PNG pixels inside the zero-dependency runtime. Pixel regression belongs in the target project's Playwright screenshot gate, where the browser tooling already exists.

Performance has the same boundary. The templates can observe long tasks and CLS during a stepped scroll and apply project-specific budgets. Those starting thresholds are not proof that a recreation performs well. They are a gate against buying visual similarity with main-thread blocking or layout movement.

"Looks close" can then be challenged with narrower questions. Is the sequence correct in default mode? Is every required element visible with reduced motion? Does the filmstrip retain the key phases? Did the scroll produce long tasks or layout shift?

I stop at the third frame

I reran the current repository tests while writing this article. Five passed, with no failures and no skips. They cover the capture baseline, several inference patterns, stagger detection, the verification suffix, and the MCP surface.

That result proves the workflow ran on this machine. It does not prove the kit understands all web motion. There is no dataset supporting that claim, and five green checks cannot invent one.

Motion Replication Kit now feels less like an animation generator and more like a small forensic workflow shared by a person and an agent. It saves states and records time. Candidate explanations go back to the filmstrip or video for review. The implementation then passes through reduced-motion, visual, and performance gates.

My final check is now very specific: open the filmstrip and stop at frame three. Can it show whether the element is still transitioning, already pinned, or coupled to scroll progress?

If the answer is still unknown, the implementation brief stays empty. Add video when continuity is missing. Return to the trace when the browser timeline is unclear. If frame three does not hold up, the code waits.

Related posts

More notes close to this topic.

Small Content Models Beat Large CMS Migrations Early On

Frontend
April 10, 20266 min readUpdated April 12, 2026

A narrow local schema often outlasts a big CMS decision until the content shape is actually stable.

content-modeling
mdx
typescript
Read article

Building a Personal AI Workbench with Local Tools and Cloud Models

Featured
AI Engineering
May 8, 20268 min readUpdated May 10, 2026

A practical setup for drafting, testing, and shipping AI work without letting the workflow get tangled.

ai-agent
automation
codex
Read article

Designing Case Studies for Technical Portfolio Sites

Featured
Product Building
May 5, 20266 min readUpdated May 7, 2026

How to structure a case study so it proves judgment, not just output.

portfolio
case-study
writing
Read article

Next

Keep browsing the archive, or turn the questions in this essay into a concrete conversation.