Docs
How Frame Jam works
Frame Jam is a small local app that runs next to your coding agent. It doesn't make videos: your agent does, with Hyperframes. Frame Jam does the two jobs chat does badly: picking a style and giving precise feedback.
What runs where
One Node program, framejam, does three things:
- Serves the web UI and a REST API on
http://localhost:4517. Open it in your agent app's browser pane. - Speaks MCP over stdio when started with
--stdio. This is how Cursor, Claude Code and Codex connect. - Speaks MCP over streamable HTTP at
http://localhost:4517/mcp, for other MCP clients.
Reviews, versions and comments are JSON files in ~/.framejam. If several agent windows each start their own copy, the first one hosts the UI and the rest share the same folder, so a comment you send from the page reaches whichever agent is waiting.
The loop
- Pick a style. Open
/styles, watch the previews and press Use this style. The agent reads it withget_selected_preset: palette, fonts, easing, transitions, text animations, rhythm, a written guide and a working template. - Your agent builds and renders. It writes the composition in HTML and GSAP, runs
npx hyperframes lintand renders a new mp4 per version. - It opens a review.
open_reviewreturns a URL. The latest version plays the live composition, so a click can target the exact word or shape. - You comment. Pause and type, click to pin a spot, or drag across the filmstrip for a range. Enter adds the comment.
- You send. The agent has been blocked in
wait_for_feedback, so it gets every comment at once: timestamps, pin positions, frame images and, for live compositions, the CSS selector and GSAP tween you clicked. - Version 2 arrives. The agent calls
add_versionwith a one-line note, and the page moves to it by itself.
If your agent wasn't listening
Once an agent ends its turn, nobody is waiting. Your comments are saved, and the page shows one line to paste into the chat. The agent then calls get_feedback, which picks up whatever hasn't been delivered yet.
Try it
After you install Frame Jam, open localhost:4517 and ask your agent:
Make a 7-second launch teaser with Frame Jam and open it for review.Limits worth knowing
- The UI lives in whichever process got port 4517. If that window closes, start another or run
npx -y framejam. - Only the latest version plays live. Older versions play their mp4 snapshot so they look as they did.
- Frame thumbnails need ffmpeg and a rendered mp4.
- There is no auth. It binds to 127.0.0.1 by default; be careful with tunnels.