
Frame Lens
Eyes and ears for AI agents: measured cuts, easing, palette, beats and transcripts from any video.
- GitHub stars
- 1
- tools
- 17
- auth
- Secret needed
- transport
- STDIO
- env vars
- 4
- last updated
- Nov 10, 2026
Tools
17 toolsPublic tool metadata for what this MCP can expose to an agent.
planStart here for any video. Classifies it (talking head, screen, motion graphics, music video, live action), reads the goal from the request (`listen`, `learn`, `find`, `style`, `sound`, `production`) and lists the steps with an image-token estimate
Start here for any video. Classifies it (talking head, screen, motion graphics, music video, live action), reads the goal from the request (`listen`, `learn`, `find`, `style`, `sound`, `production`) and lists the steps with an image-token estimate
No parameter schema in public metadata yet.
probeFetches the source; duration, size, frame rate (variable or not), HDR, audio, captions, workspace folder
Fetches the source; duration, size, frame rate (variable or not), HDR, audio, captions, workspace folder
No parameter schema in public metadata yet.
transcriptWord-timed transcript from captions (Gemini as a fallback for YouTube)
Word-timed transcript from captions (Gemini as a fallback for YouTube)
No parameter schema in public metadata yet.
framesFrames and contact sheets with time, frame number and the words spoken under each picture: `at`, `every`, `fps`, `every_frame` (every native frame with real timestamps) or `around` a phrase
Frames and contact sheets with time, frame number and the words spoken under each picture: `at`, `every`, `fps`, `every_frame` (every native frame with real timestamps) or `around` a phrase
No parameter schema in public metadata yet.
boundariesWhere the picture changes abruptly, scored, plus how dynamic the video is
Where the picture changes abruptly, scored, plus how dynamic the video is
No parameter schema in public metadata yet.
styleCuts told apart from fast motion and flashes, dissolves, fades, dips through black or white and wipes (derived), shots split at them with palettes, moves with duration and easing family; writes `motion-spec.json`, `STYLE.md`, `TIMELINE.md`, `ANALYSIS.md`
Cuts told apart from fast motion and flashes, dissolves, fades, dips through black or white and wipes (derived), shots split at them with palettes, moves with duration and easing family; writes `motion-spec.json`, `STYLE.md`, `TIMELINE.md`, `ANALYSIS.md`
No parameter schema in public metadata yet.
trackFollows one element (found automatically or from a box) and fits the exact curve of each property that moves (x, y, scale, opacity): `cubic-bezier`, spring (stiffness, damping, mass), linear or steps, with fit error, duration in frames, delay and a quality grade; writes `TRACK...
Follows one element (found automatically or from a box) and fits the exact curve of each property that moves (x, y, scale, opacity): `cubic-bezier`, spring (stiffness, damping, mass), linear or steps, with fit error, duration in frames, delay and a quality grade; writes `TRACK...
No parameter schema in public metadata yet.
audioLoudness (LUFS), silences, onsets, tempo and beats, cuts on the beat, spectrogram
Loudness (LUFS), silences, onsets, tempo and beats, cuts on the beat, spectrogram
No parameter schema in public metadata yet.
exportStarter project from the motion spec (see [Exports](#exports))
Starter project from the motion spec (see [Exports](#exports))
No parameter schema in public metadata yet.
compareYour render against the reference: duration, cuts matched within 3 frames, palette distance, picture similarity, the least similar moments side by side
Your render against the reference: duration, cuts matched within 3 frames, palette distance, picture similarity, the least similar moments side by side
No parameter schema in public metadata yet.
webA live page's animations read exactly from the browser (CSS, Web Animations, Motion, GSAP), scroll-triggered ones too, plus real fonts and colours (needs Chrome or Edge and Node 22+). They are recorded from the first frame, so page-load animations that end before the page is r...
A live page's animations read exactly from the browser (CSS, Web Animations, Motion, GSAP), scroll-triggered ones too, plus real fonts and colours (needs Chrome or Edge and Node 22+). They are recorded from the first frame, so page-load animations that end before the page is r...
No parameter schema in public metadata yet.
exactLottie / dotLottie, Rive (`.riv`: artboards, timelines, curves, state machines) and Figma prototype transitions, read from the source's own data
Lottie / dotLottie, Rive (`.riv`: artboards, timelines, curves, state machines) and Figma prototype transitions, read from the source's own data
No parameter schema in public metadata yet.
summarize_youtube_videoGemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
Gemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
No parameter schema in public metadata yet.
ask_about_youtube_videoGemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
Gemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
No parameter schema in public metadata yet.
extract_key_momentsGemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
Gemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
No parameter schema in public metadata yet.
get_video_transcriptGemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
Gemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
No parameter schema in public metadata yet.
list_supported_modelsGemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
Gemini-based tool for YouTube links (requires your own GEMINI_API_KEY); timing and colour are described by the model, not measured
No parameter schema in public metadata yet.
Sponsors
Configuration
GEMINI_API_KEYsecretOptional. Google Gemini API key, only for the Gemini YouTube tools; the local tools need no key.
GEMINI_MODEL_NAMEdefault: gemini-flash-lite-latestOptional. Gemini model for the Gemini tools.
FRAMELENS_WORKSPACEOptional. Folder for results; defaults to .framelens in the working folder (or ~/.framelens).
FRAMELENS_AUTO_INSTALLOptional. Set to 0 to stop the automatic, hash-checked download of a missing ffmpeg or yt-dlp.
Readme
Frame Lens
Eyes and ears for AI agents. Give your agent any video or animation and a goal in plain words.
It gets back measurements, not retellings: cuts to the frame, exact easing curves, colour, beats and word-timed speech.
Details
- Repository
- github.com/makkov-design/framelens
- Website
- makkov-design.github.io/framelens
- Categories
- Design & Creative, Media & Entertainment
- Package
framelens- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active