claudeers.
// Claude Skills

framewright

Agent skill + template: short videos made entirely from code. One HTML file, every frame a pure function of (frame, seed, width). Claude Code, Codex, Gemini…

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up framewright (git-clone project) into my current project.
Found on https://claudeers.com/framewright
Repo: https://github.com/smwbev/framewright
Homepage/docs: —
Detected install method: git-clone → git clone https://github.com/smwbev/framewright
Category: skills. Platforms: cli, web.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
unknown; community-verified: false. Confirm the source before running anything.
// or clone
git clone https://github.com/smwbev/framewright

// compatibility

Platformscli, web
Operating systems—
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguageHTML

Get your FREE $2.50 API credits to access TickAtlas financial data ↗

framewright

Русский

An agent skill and a project template for short videos made entirely from code.
One HTML file. Every frame is a pure function of (frame number, seed, width).
Rendered with headless Chrome, assembled with ffmpeg, scored by a script. No footage, no images, no CDN.


One world instead of separate scenes

The world demo: a line draws a ring and a square, a lid covers the square, the line travels on through three growing loops while the camera pulls back One line: a golden line draws a bee's life from an egg in a cell to the comb, the hive, a meadow and a last flight at sunset

Left: the world demo that init.sh --world scaffolds, 8 seconds. Right: One line, the life of a worker bee in one take, 56 seconds, 1680 frames, one 57 KB HTML file, shown at 5× speed; titles in Russian. Full MP4 with sound: honeybee-sample.mp4 (13 MB).

Contact sheet of One line: egg, larva, cap, comb, first flight, meadow, dance, last flight, drop of honey

When the story is one journey told without cuts, the scenes stop being separate pictures. Each becomes a builder that adds its part to one world: a line that remembers when each of its points was drawn, camera keys with even zooms and smooth following, light with bloom, titles. Every frame is drawn from that world and is still a pure function of (frame, seed, width). The soundtrack reads the line's speed and position on screen from the film. Start one with init.sh --world; the method is in references/world.md.

Scenes joined by cuts

The other mode: separate scenes, each a picture of its own, cut on the beat. Here, a television that has nothing to show.

Preview of the RIS TV example: TV powers on, test card, countdown, teletext, oscilloscope

Contact sheet of all eight scenes of the example

The RIS TV example: 40 seconds, 8 scenes, 1200 frames, one 45 KB HTML file. The portrait scene in the public example uses a synthetic placeholder. Full MP4 with sound: ris-tv-sample.mp4 (27 MB).

What it does

You describe the video you want. The agent runs a short interactive brief, proposes three concepts (a literal one, a metaphor, a genre parody), agrees a storyboard on a beat grid, then builds the video scene by scene, looking at rendered frames after every step. It renders the frames, synthesizes a soundtrack to the locked scene lengths, assembles the MP4 and checks the file. Photos become posterized polygons, never pixels. Every step has a visual checkpoint and a rule against guessing. Both modes above come out of the same workflow: a concept told in one take is built as one world.

StepWhat the agent doesWhat you see
0checks node, ffmpeg, Chrome, python; offers to install what is missinga short report
1the brief: message, format, length, tone, style, assets, sound, deliverables8–11 questions with defaults
2three concepts with palette, key scenes, ending, sound and riska table and a recommendation
3storyboard in bars, scaffold from the skeleton, first frameone "go"
4one scene at a time, three frames per scene, a contact sheet every 2–3 scenescontact sheets
5photos traced into polygons, placeholders until files arrivea portrait preview
6full contact sheet, a determinism check, render in parallel tabs, encode, verify from the MP4a preview MP4
7soundtrack synthesized to the cue map, MP4 rebuiltthe final MP4
8variations on request: another seed, vertical cut, GIF, poster framefiles

Before the full render a check renders sample frames of every scene in seven different orders and demands identical pixels, scans the source for clocks and Math.random, and fails if the page loads any file. The MP4 is encoded with the BT.709 matrix and tagged, so players show the colours that were reviewed.

Quick start

npx skills add smwbev/framewright -g

-g installs it for your user, so every project sees it; without -g it goes into the current project only. The installer asks which agents to install it for (Claude Code, Codex, Gemini CLI, Cursor, OpenCode and others); -a claude-code picks one without asking.

Then open your agent in an empty folder and describe the video, for example: "a 20-second deadpan video asking Anna when the release ships, retro TV style". The agent loads the skill, starts with the brief and sets up the project itself.

Update the skill

npx skills update framewright -g     # installed with -g
npx skills update framewright        # installed into a project: run it inside that project
npx skills list -g                   # what is installed, where, and for which agents

The installer remembers where the skill came from and fetches the latest version from GitHub; the changes are listed on the releases page. Videos you already started keep their own copy of scripts/, so an update never changes them behind your back. To give an older project the new scripts, copy the scripts/ folder of the installed skill (npx skills list -g shows where it is) over the project's scripts/, and leave its index.html alone.

Or work inside a clone

git clone https://github.com/smwbev/framewright my-video
cd my-video
npm install
claude        # or: codex, gemini, cursor, opencode ...

The agent picks up AGENTS.md and the skill from the clone. Update it with git pull.

Other ways

Gemini CLI has its own installer: gemini skills install https://github.com/smwbev/framewright --path .agents/skills/framewright --consent. It has no update command: run gemini skills uninstall framewright and install again. You can also copy .agents/skills/framewright into a project by hand (Claude Code reads .claude/skills/) and copy it again to update.

Supported agents

npx skills add puts the skill where each agent looks for it. Inside a clone of this repository they find it like this:

AgentHow it picks the skill up
Claude Code.claude/skills/framewright (symlink to the skill); CLAUDE.md imports AGENTS.md; invoke with /framewright
OpenAI Codexreads AGENTS.md and .agents/skills/ natively; $framewright
Gemini CLI.gemini/settings.json points at AGENTS.md; skills from .agents/skills/
CursorAGENTS.md and .agents/skills/ natively
GitHub Copilot coding agentAGENTS.md and .agents/skills/ natively
OpenCode, Amp, Zed, Warp, Factory, Cline, Roo, WindsurfAGENTS.md; most read .agents/skills/ too
anything elsepoint it at .agents/skills/framewright/SKILL.md

The skill follows the Agent Skills specification: SKILL.md with frontmatter, references/ loaded on demand, scripts/ and assets/.

Requirements

Node 20+, npm, ffmpeg with libx264, Chrome via Puppeteer (installed by npm install). Python 3 with numpy, scipy and Pillow only if a photo will be traced. macOS and Linux; Windows through WSL. The agent checks all of this itself before it starts and asks before installing anything. In a clone you can run the check by hand:

bash .agents/skills/framewright/scripts/doctor.sh            # report
bash .agents/skills/framewright/scripts/doctor.sh --install  # install what is missing, asks first

Repository layout

AGENTS.md                      entry point for agents
CLAUDE.md, GEMINI.md           one-line imports of AGENTS.md
.gemini/settings.json          Gemini CLI reads AGENTS.md
.agents/skills/framewright/
  SKILL.md                     the workflow
  references/                  questionnaire and concept generator, styles, engine guide, one-world films, audio, photo, troubleshooting
  scripts/                     doctor, init, look, check, render, build, make, export-curves, trace, inject, portrait
  assets/                      skeleton.html, world.html, audio-template.mjs, storyboard.md
.claude/skills/framewright     symlink for Claude Code
examples/ris-tv/               a finished video in scenes: index.html, audio.mjs, previews
examples/honeybee/             a finished one-take film built as one world: index.html, audio.mjs, previews
examples/world-demo/           a preview of the demo that init.sh --world scaffolds

Examples

examples/honeybee is "One line", a complete 56-second film in one take: a golden line draws a worker bee's life from an egg in a cell to the comb, the hive, a meadow, the waggle dance and a last flight at sunset, and its last point falls back into the comb as a drop of honey. It is the one-world method at full scale, with a soundtrack driven by the line. npm run example:honeybee writes its contact sheet; the full render is described in its README.

examples/world-demo shows the eight-second demo that init.sh --world scaffolds as a starting point for a film of your own.

examples/ris-tv is a complete 40-second video in the retro TV style, made of scenes joined by cuts: the set powers on, snow and NO SIGNAL, a test card with a day counter, a countdown that breaks, two teletext pages with the question, an oscilloscope tracing a paperclip, a portrait that locks in, and the tube switching off. Render a contact sheet of it:

npm install
npm run example        # writes shots/example-sheet.png

Or render the whole thing: HTML=examples/ris-tv/index.html node .agents/skills/framewright/scripts/render.mjs frames 7 1920 5, then cd examples/ris-tv && node audio.mjs ../../track.wav, then bash .agents/skills/framewright/scripts/build.sh out.mp4.

Making videos by hand

The skill is also a manual. references/guide.md explains the engine, the helpers, the timing grid and the review protocol; references/styles.md catalogues twelve visual systems with post-processing recipes; references/world.md covers films made as one continuous world; references/audio.md and references/photo.md cover sound and portraits. assets/skeleton.html and assets/world.html are working starting points: open one in a browser for a live preview, add ?f=30&w=1200 for a single frame, ?grid=24 for a contact sheet.

License

MIT. Videos you make with it are yours.

// faq

What is framewright?

Agent skill + template: short videos made entirely from code. One HTML file, every frame a pure function of (frame, seed, width). Claude Code, Codex, Gemini CLI, Cursor.. It is open-source on GitHub.

Is framewright free to use?

framewright is open-source under the MIT license, so it is free to use.

What category does framewright belong to?

framewright is listed under skills in the Claudeers registry of Claude-compatible tools.

2 views
★ 17 stars
unclaimed
updated 12 days ago

// embed badge

framewright on Claudeers
[![Claudeers](https://claudeers.com/api/badge/framewright.svg)](https://claudeers.com/framewright)

// retro hit counter

framewright hit counter
[![Hits](https://claudeers.com/api/counter/framewright.svg)](https://claudeers.com/framewright)

// reviews

// guestbook

0/500

// related in Claude Skills

🔓

An agentic skills framework & software development methodology that works.

// skillsobra/⟨Shell⟩★ 292,190◷ MIT[ claude ]
🔓

Public repository for Agent Skills

// skillsanthropics/⟨Python⟩★ 178,324[ claude ]
🔓

💫 Toolkit to help you get started with Spec-Driven Development

// skillsgithub/⟨Python⟩★ 138,919◷ MIT[ claude ]
🔓

AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, and more). Turn any folder of code, SQL schemas, R scripts, shell scripts, docs,…

// skillsGraphify-Labs/⟨Python⟩★ 123,800◷ MIT[ claude ]
→ see how framewright connects across the ecosystem