Recreate any web animation from a screen recording. A motion-design plugin: analyzes motion (timing, easing, stagger, loops) and rebuilds it as GSAP / CSS / Framer Motion / Lottie code.
FAQ
motiscope is a Claude Code plugin with 8 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes motiscope-analyze, motiscope-doctor, motiscope-rebuild-site. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add KumarSashank/motiscope> /plugin install motiscope@motiscope
Repo: KumarSashank/motiscope
A motion-design tool for coding agents. Pure Python (standard library) + ffmpeg.
No cloud, no npm, no accounts required. Ships as a Claude Code plugin, and as
portable agent skills for Codex, Cursor, and anything that reads AGENTS.md.
"I want this animation on my site." โ drop the clip, run
/motiscope:analyze, then/motiscope:recreate gsap.
motiscope measured the motion of the tomato โ a 4.45s clock, the wake-and-wave beats, and the easing curve of each. The banana is an original character built on that measured motion: an 11 KB animated SVG. The timing transfers; the artwork doesn't have to.
Original animation from SVGator's website-animation examples โ all credit to the original creator. โ full example ยท gallery
Fifteen tiles spin, scroll and ripple. motiscope measured a 0.75s master beat โ burst peaks at 0.317 / 1.067 / 1.817s, agreeing to ยฑ0.02s across three independent tiles โ and an easing whose peak angular speed is 3.6ร the mean, far sharper than a stock ease-in-out. The result is 14 KB of animated SVG with no JavaScript. Only the palette changed.
The whole-frame summary said linear. Per tile it isn't โ the velocity drops to near zero
and ramps again. That's the point: the report gives you the timing, you read the frames.
โ Live recreation ยท raw analysis + build script ยท original on SVGator
motiscope does the one thing a vision model can't do from a screenshot โ measure time โ and hands everything else to the model:
scdet, freezedetect,
blackdetect, siti, signalstats) give the exact timing: durations, the
per-segment easing curve (a real cubic-bezier fitted from the velocity
profile), beat/segment boundaries, stagger timing, and loop period. A still has no
time axis โ so this is the part that can't be guessed. It's the moat.So: measured timing + curated frames โ the model recreates it. motiscope is a precise stopwatch and a smart frame-picker; the intelligence is Claude's.
Want the real mechanism? How it works
walks through the motion-energy curve, why the hold threshold is anchored to the 75th
percentile instead of the peak, and how easing is recovered by integrating speed โ with
figures drawn from real pipeline output, and ground-truth clips you can run yourself.
Exact constants: docs/how-it-works.md.
Staggered entrances, easing curves, holds, fades, loops โ read off the energy curve and rebuilt as code. (These figures are animated SVGs โ the same kind of motion motiscope recreates.)
Claude Code โ install the plugin; it bundles everything:
/plugin marketplace add github:KumarSashank/motiscope
/plugin install motiscope@motiscope
Codex, Cursor, or any other agent โ install the CLI, then teach your agent:
git clone https://github.com/KumarSashank/motiscope.git ~/.motiscope
~/.motiscope/install.sh # one symlink into ~/.local/bin, no sudo
motiscope install codex # -> ~/.agents/skills/
motiscope install cursor # -> ./.cursor/skills/ + rules
motiscope install agents # -> a marked block in ./AGENTS.md
motiscope install list # every target
Requires ffmpeg + ffprobe (and python3). Run motiscope doctor โ or
/motiscope:doctor in Claude Code โ to check and, with your consent, install them.
New here? See QUICKSTART.md. Full matrix and version caveats:
PLATFORMS.md.
/motiscope:doctor # verify deps, scaffold config (first run)
/motiscope:analyze animations/hero.mp4 # analyze a recording -> animation spec
/motiscope:recreate gsap # emit GSAP code (or css | framer | lottie)
Or just drop a recording into an animations/ folder in your project and run
/motiscope:analyze โ it will find it.
Local files only. Supported: .mp4 .mov .webm .mkv .m4v .avi .gif. To capture a
web animation, screen-record it and save the file.
| Command | What it does |
|---|---|
/motiscope:analyze [path] [notes] | Extract the motion analysis + curated frames, then characterize the animation as a spec. |
/motiscope:recreate [gsap|css|framer|lottie] [out-dir] | Turn the spec into runnable code for a target framework. |
/motiscope:rebuild-site [path] [gsap|css|framer] | Rebuild a whole landing page from a walkthrough recording โ sections, copy, design system, scroll animations, and generated assets. |
/motiscope:doctor | Verify ffmpeg/ffprobe; scaffold ~/.config/motiscope/{config.json,.env}. |
Outside Claude Code the same four workflows are skills named motiscope-analyze,
motiscope-recreate, motiscope-rebuild-site, motiscope-doctor (Codex mentions them
with $name, Cursor with /name), and the measurement runs as motiscope analyze ....
In Claude Code, GSAP output leans on the official GSAP skills (timeline / core / scrolltrigger / react / utils) for idiomatic results; elsewhere the workflow carries the equivalent guidance inline.
Only the curated frames the model sees cost tokens (~300โ400 each); the numeric analysis is free. Frame count tracks motion complexity, capped by a preset โ it does not grow with video length (a 10s clip typically yields ~10 frames).
| Preset | Frame cap | Resolution | Use when |
|---|---|---|---|
draft | 12 | 512px | quick look, tight budget |
balanced (default) | 32 (usually 8โ20 after dedup) | 640px | most cases |
detailed | 48 | 960px | dense sequences / reading text |
landing | 44 | 1280px | web/landing walkthroughs โ cover each section + its motion |
--start 0:12 --end 0:15 (timestamps come
back in absolute source time).--fps 20 lays a uniform backbone (a frame every
~50ms) across the window; near-identical frames still collapse unless --no-dedup.--decompose / disable with --no-decompose.repeat / yoyo.Small elements register correctly: the primary motion signal is localized (built from the most-active regions), so a small button/card/icon moving on a large page is detected as real motion rather than washing out in a whole-frame average.
Per-video working files land in a gitignored .motiscope/<slug>/:
.motiscope/<slug>/
manifest.json # video meta + timeline + frame index (machine artifact)
motion.json # raw motion timeline: energy curve, grid, segments, beats, signals
report.md # human-readable summary (energy sparkline, segment table)
frames/ # curated PNGs, e.g. frame_003_t0.42s_keypose.png
Recreated code is written to motiscope-output/<target>/ by default.
If a recreation needs an image, recreate will ask whether to point at your own file,
generate one, or use a placeholder. Image generation is real via the gemini /
imagen provider (Imagen through the Gemini API) โ set GEMINI_API_KEY in
~/.config/motiscope/.env (mode 0600; keys are never printed, written into generated
code, or committed). Other providers (video, and other image backends) still write a
labeled placeholder until wired.
python3 scripts/assetgen.py generate --type image --provider gemini \
--prompt "cinematic hands holding a phone, dark teal grade" --out hero.png --aspect-ratio 16:9
Provider slots: image โ gemini/imagen (implemented), OpenAI, Stability, Replicate, fal; video โ Runway, Replicate, fal.
For best results: capture at a high frame rate and avoid heavy compression.
See CONTRIBUTING.md. Run the test suite:
python3 -m unittest tests.test_analyze_motion tests.test_integrations \
tests.test_docs_constants tests.test_site_meta
skills/*/SKILL.md is the single source of truth for the workflows; everything under
integrations/ is generated from it by scripts/build_integrations.py, and CI fails if
the two drift apart. See PLATFORMS.md.
MIT. See LICENSE. motiscope adapts frame-analysis techniques from two MIT projects โ claude-video and claude-video-vision โ with gratitude; see ATTRIBUTION.md.
.claude-plugin/
marketplace.json
plugin.json
.gitattributes
.github/
ISSUE_TEMPLATE/
config.yml
share-your-build.yml
workflows/
ci.yml
.gitignore
agents/
motion-analyst.md
ATTRIBUTION.md
bin/
motiscope
motiscope.cmd
CHANGELOG.md
CONTRIBUTING.md
docs/
.nojekyll
demo.svg
example.gif
examples/
alterfx/
index.html
README.md
source.gif
ambient/
ambient-loop.svg
compare.gif
frames.png
generate.py
index.html
README.md
report.md
banana/
banana-loop.svg
compare.gif
README.md
source-tomato.gif
basics/
hero.gif
hero.html
index.html
loop-dots.gif
loop-dots.html
loop.gif
loop.html
reports/
hero.md
loop.md
scroll.md
stagger.md
scroll.gif
scroll.html
stagger.gif
stagger.html
landing/
frames.png
index.html
report.md
site.html
source.gif
parallax/
frames.png
generate.py
index.html
README.md
record_scroll.py
recreation.html
report.md
ridges.json
scroll-poster.jpg
scroll.gif
scroll.mp4
train-scroll.png
figures/
curves.json
easing-fit.svg
energy-curve.svg
generate.py
gallery.html
hero.svg
how-it-works.html
how-it-works.md
index.html
og/
ambient.png
basics.png
gallery.png
generate.py
home.png
how-it-works.png
landing.png
parallax.png
pipeline.svg
robots.txt
sitemap.xml
examples/
_template/
README.md
README.md
hooks/
hooks.json
scripts/
check-setup.sh
install.sh
integrations/
agents/
AGENTS.motiscope.md
cursor/
rules/
motiscope.mdc
README.md
skills/
motiscope-analyze/
SKILL.md
motiscope-doctor/
SKILL.md
motiscope-rebuild-site/
SKILL.md
motiscope-recreate/
SKILL.md
LICENSE
PLATFORMS.md
QUICKSTART.md
README.md
references/
easing-map.md
measurement-traps.md
targets/
css.md
framer.md
gsap.md
lottie.md
scripts/
analyze_motion.py
assetgen.py
build_integrations.py
cli.py
config.py
extract_frames.py
ingest.py
mvlib.py
mvsetup.py
skills/
analyze/
SKILL.md
doctor/
SKILL.md
rebuild-site/
SKILL.md
recreate/
SKILL.md
tests/
make_test_clip.sh
test_analyze_motion.py
test_docs_constants.py
test_integrations.py
test_site_meta.pyยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic