URL To Motion Design
Meng ToCommunityCreated by Meng To
- Skill
- Workflow
- Automation and integrations
- MIT
- Low risk
- Has scripts
From the skill’s files
Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.
Turn a launch film, product video or post at a URL (an X or Twitter post, YouTube, Vimeo, a direct video link) into Fil HTML motion scenes. Captures the film's best 5 to 10 distinct motion-graphics shots as screenshots and clips, rebuilds each as an original Fil motion scene in its look with Fil's own words, polishes them with blind judges to 8/10, puts them in a section of the HTML motion scenes canvas, and shows them as a screening page and MP4s. Use when someone shares a video or a post and asks to capture its scenes, to get screenshots of its best shots, to add its scenes or style to the motion scenes library, or to make motion scenes like it, or says url to motion design, even if they only ask for the screenshots first. A film someone admires becomes new scenes in Fil's motion scenes library: same look and motion ideas, Fil's own words, no trace of the original's brand. The whole…
What it does
- 1. Get the source
- 2. Find every shot, pick the best 5 to 10
- 3. Set up the run
- 4. Build with helpers
- 5. Judge blind, fix, repeat
- 6. Put them on the canvas
When to use it
- Use when someone shares a video or a post and asks to capture its scenes, to get screenshots of its best shots, to add its scenes or style to the motion scenes library, or to make motion scenes like…
Advantages
The skill’s files do not state this.
Usage examples
The skill’s files do not state this.
Install
1 of its files are not mirrored here, so install it from its source:
https://github.com/MengTo/Skills/tree/5ea1661a0e05d82b054553daaa6baf6d0233c33c/agent-skills/media/url-to-motion-design
Documentation by Meng To
URL to motion design
A film someone admires becomes new scenes in Fil's motion scenes library: same look and motion ideas, Fil's own words, no trace of the original's brand. The whole loop ran once end to end on 5 Nov 2026 (a 3-minute launch film on X → nine scenes, four at 8/10, on the canvas, as a screening page and MP4s); this skill is that loop with its traps fixed.
Paths: <skill> is this folder, <repo> is the facet-studio checkout, <run> is the run folder (<repo>/qa/<slug>/, untracked).
1. Get the source
node <skill>/scripts/fetch-source.mjs "<url>" <run>/sourceX posts come through api.fxtwitter.com (the post's own video and text); YouTube and Vimeo through yt-dlp; direct links as they are.
Read source.json (text, author, length) so you know what the film is about.
2. Find every shot, pick the best 5 to 10
node <skill>/scripts/shots.mjs scan <run>/source/source.mp4 <run>/scanRead every 1-fps sheet in <run>/scan/sheets/ (tile k of 1fps_<start>.jpg is second start+k) with cuts.txt beside them. Pick:
Motion graphics only: animated type, diagrams, UI, data, particles, collages. Skip talking heads and plain footage.
No repeats (the owner: "scenes should not be repeatable"): one of each kind. Two shots on the same device (a white and a dark node map, two particle spheres, two photo collages) means keep the stronger. Same look but a different idea (a tower and a grid) can stay.
5 to 10 seconds each, bounded by real cuts. Shots under 5 s go. Soft transitions hide inside long runs: when a boundary is unclear, look at 0.2 s strips (
ffmpeg -ss <t> -t 2.4 -i src -vf "fps=5,scale=320:-1,tile=6x2" -frames:v 1 x.jpg).The best 5 to 10, ranked by craft and by how well the idea carries to Fil. Write
picks.json([{id, name, a, b, hero, what}], ids short and prefixed per section, e.g.pg-tower), then:
node <skill>/scripts/shots.mjs pick <run>/source/source.mp4 <run>/picks.json <run>Look at overview.jpg and every hero still: a frame mid-transition (two captions crossfading, motion blur, a word half-swapped) needs
another time. Send the overview and the stills with SendUserFile.
Stop here if they asked for screenshots first. Ask before building: the build is hours of agents, not credits, but it's their call.
3. Set up the run
Write
<run>/BRIEF.mdfromreferences/builder-brief.md: the section name (a plain look name, never the source's brand), the look in your own words, one font family for every scene, and per scene its id, length (the shot's, 5 to 8 s), message type (feature, number, statement) and a first idea that carries the shot's motion into Fil's world with true facts only.Start the lab (
references/lab.md): a launch.json entry forlab/server.mjs,preview_start, smoke-testscripts/render.mjs. In-app browser only.Folders:
<run>/scenes/,<run>/out/,<run>/keep/,<run>/judges/.
4. Build with helpers
Three general-purpose helpers in the background, 2 to 4 scenes each, grouped by ground (light data, light product, dark), each told to
read <run>/BRIEF.md and everything it lists, edit only its own files and report one line per scene. While they work, keep the runner
awake (lab.md): this is where the time goes if you don't.
5. Judge blind, fix, repeat
python3 <skill>/scripts/panel.py setup <run> <tag> <id,id,…> # sheets + two anchors, shuffled
# two fresh general-purpose agents, each: read judges/<tag>/JUDGE.md, Read every sheet, write judges/<tag>/judgeN.jsonl, read nothing else
python3 <skill>/scripts/panel.py tally <run> <tag>Judge a helper's scenes as soon as they report; don't wait for all. Copy every judged version to
keep/<id>-<tag>.html(+ its sheet) before anything changes, and check helpers didn't edit after reporting (cmp).8, 8 passes. Save it as
keep/<id>-pass-<tag>.htmland tell its helper never to touch it again.Below 8: send the verdicts word for word plus your own one-line read and the fix (
references/seven-to-eight.md). Read the sheet yourself before blaming a layout; one round was lost to misreading a sheet's cell heights.A version that scores lower is dropped: restore the better one as the base. Two rounds where the notes name the idea itself means a new idea in the same look. After about six judged versions at 7, stop and ask the owner (they chose "Leave them at 7" in round 19).
Panels vary about a point; the anchors tell you how strict this one was.
6. Put them on the canvas
references/publish.md: an empty section sized for all of them, one Code/motion node each with its score in its name and a full note,
pages written by a cheap helper with character counts checked, the best judged version for scenes short of 8, a canvas log line.
Free: never generate.
7. Show them at speed
Unasked: a screening page (scripts/screening.mjs → tested on localhost → Artifact) and real MP4s with sound (scripts/video.mjs, ~12 min for a minute of scenes). The owner asked "show me videos" twice: a live page wasn't enough the second time, the files were.
Rules that hold throughout
Style, not copy. Look, palette, type feel, camera and motion language only. Never the source's brand, product, logo, words, people, photos, partner logos, claims or exact layouts. Fil's cube (verbatim from
public/favicon.svg) is the only logo. The source clips are reference, never published.True facts about Fil only (references/scene-contract.md, Words).
The bar is 8 from two fresh blind judges, lower score counts, and you say honestly what's short.
Record evals: every verdict as a line in the lab's
scores.jsonl.No product change, so no version, changelog or commit in facet-studio; the skill's own changes go to
~/.claude/skillsand MengTo/Skills.
Report
One table: scene, judges, on the canvas (pass, or best version and why it's short), the canvas link, the screening link, the video files. Then what's short and what would move it (usually a new idea, not polish).
Files
- ATTRIBUTION.mdAdded by AutoGineer857 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md6.7 KiB
- agents/openai.yaml548 B
- lab/anchors/prompt-box-final.jpg71.6 KiB
- lab/anchors/prompt-box.jpg182.7 KiB
- lab/anchors/ruled-lines-final.jpg49.3 KiB
- lab/anchors/ruled-lines.jpg146.8 KiB
- lab/runner.html5.8 KiB
- lab/screening.html10.1 KiB
- lab/server.mjsScript4.8 KiB
- lab/template.html4.5 KiB
- references/builder-brief.md4.3 KiB
- references/judge.md2.3 KiB
- references/lab.md3.4 KiB
- references/publish.md3.8 KiB
- references/scene-contract.md4.8 KiB
- references/seven-to-eight.md4.1 KiB
- scripts/__pycache__/panel.cpython-314.pyc(opens on GitHub)Not mirrored: opens on GitHub8.4 KiB
- scripts/fetch-source.mjsScript2.9 KiB
- scripts/panel.pyScript3.9 KiB
- scripts/publish-list.mjsScript1.3 KiB
- scripts/render.mjsScript2.3 KiB
- scripts/screening.mjsScript4.3 KiB
- scripts/shots.mjsScript4.7 KiB
- scripts/video.mjsScript4.7 KiB
references/seven-to-eight.md
What separates a 7 from an 8
The bar is 8/10 from two fresh blind judges, the lower score counting. Across several hundred verdicts on Fil's scenes, the same things cost the point. Fix what the scene's judges named first, then check all of these.
A dead ending. The biggest one. Nothing moving after ~60 % of the length, or a frozen last 1.5 s. Land the second beat late and keep something meaningful alive to the end: a slow push on the whole frame, a thread still drawing, a counter settling, light travelling. One blinking dot doesn't count. Longer scenes are judged harder on this: 6 s beat 8 s twice in round 19.
Timid final frame. Small things in a big empty field, or plain text on a flat colour. The last ~15 % is a poster: scale, one idea, intentional edges, centred mass (judges call out "bottom-heavy", "crowds top right while top left is empty").
Tiny words. Readable words at least 1.8cqw, display lines far bigger, faux-UI and code at least 1.6cqw. Cut lines rather than shrink them; fewer and larger wins. Judges call mono text "tiny" even at 1.8cqw when there's a lot of it.
Slideshow of states. Fades between layouts read as a template. Connect beats with one continuous move: the camera travels, one element becomes the next, one mechanism causes the next thing. A "fold" where many parts collapse at once reads as clutter mid-move; sequence it or don't do it.
No stated point. If a viewer can't say what the shot claims, add one short line or make the payoff say it.
Weak or stock imagery. Generic particle globes, purple orb nebulas, icon rings, grey wireframes, gradient placeholder thumbnails, blob trees read as filler. Draw something with craft (layered gradients, light, texture, real structure) or remove it.
Slow or empty openings. Frame one is a composed picture and something happens in the first half second. No long typing on a dim frame, no shapeless "forming cloud".
Clipping, collisions and bands. Things touching the frame by accident, labels colliding, a line crossing through tiles or type, big unused bands. Going off the edge must look deliberate.
Bugs judges always catch: a travelling light frozen mid-path in the last frame; a counter that stops while its bar runs; copy that swaps late and reads as a second message ("Done runs every node."); a label covering a card's chrome; a regroup mid-shot that reads as a reset.
How far to change a scene
At 7: keep the idea and fix exactly what was named. Two rounds at 7 where the notes name the idea ("rotating-word trope", "stock icon orbit") means polish won't get there: a new idea in the same look, same message.
At 6 or 5: don't polish the old composition. New idea, same look, same subject.
A version that scores lower than the one before is dropped; keep every judged version so you can restore it.
Keep
data-fil-textkeys where the idea survives.
Before a builder calls a scene done
Look at the sheet and the last frame, frame by frame; close looks with
--times. List flaws, fix them. 3 to 5 rounds; stop at 6.grep: nosetInterval, noMath.random, no em dashes on screen, no\uescapes, colours only through the variables.Render once in the other mode (
--mode light|dark) and once with the headline 1.6× longer (--t key="…"), toout/_<id>-aandout/_<id>-b. Both must still look designed.Render the final file once more to
out/<id>so the sheet matches the file, and check it for blank frames (a dropped frame is the renderer's, render again). Builders' own scores run about one point high.
What happened in round 19 (a launch film, nine shots)
4 of 9 reached 8, 8 in 2 to 3 rounds each (an isometric tower, an isometric grid, a photo-pile pull-back, a camera travelling a path). Five sat at 7 through 5 to 10 judged versions: particle-cluster spheres, an agent-windows feature, a particle galaxy, a word swap and an icon orbit. What finally decided them was the idea, not the polish. Judges saw stills; the owner then asked to see them at speed ("show me videos"), so make the screening page and the MP4s part of the delivery, not an afterthought.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python, Needs Node.js
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Meng To
- Publisher
- Meng To (Community)
- Source
- MengTo/Skills · agent-skills/media/url-to-motion-design · commit 5ea1661
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Meng To or Meng To.
Get it from the source
1 of this skill’s files are not mirrored here, so there is no ZIP. Get the complete skill from its source: MengTo/Skills