leepokai/claude-mod-cutroom
cutroom
Cutroom:Claude Code 内の HyperFrames プロジェクト用カッティングルームペイン。フレームプレビュー、タイムライン、トリム/分割/移動/削除/取り消し、Studio 選択ブリッジ、Claude に送る指示編集に対応します。
この mod について
claude-mod-cutroom
Cutroom は Claude Code 内で動く HyperFrames 動画用のカッティングルームです。一つのコマンドでブラウザに HyperFrames Studio(実際のプレビューとタイムライン)を開き、ライブフレームのサムネイルとカットボタンを Claude Code のペインに表示します。Studio で何を選択したかも Claude に伝わるため、"make this bigger" と言うだけで追加の指示は要りません。
これは別の NLE を作るものではありません。キャンバスは Studio です。ペインが行う各カットは HyperFrames CLI の 1 回の呼び出し(timeline、snapshot、check、render)であり、ボタンで表せない内容は、プロジェクト、Studio の選択、再生ヘッド、フレームスナップショット、タイムラインをすでに含むプロンプトとして Claude に送られます。
my-launch · 45s · Studio ● [open Studio ↗] localhost:3061/#project/my-launch
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← the frame under the
█████████████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀████ playhead, as half-block
████████████████ Message your coding agents ████████████████ cells in any terminal,
████████████████ like teammates. ████████████████ real pixels on kitty /
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Ghostty and the desktop app
▶ |◀ -1s -.1 12.5s +.1 +1s ▶| ⟳ t=____ seek
Studio: 03 Demo · compositions/frames/03-demo.html
[ Trim in→┃ ] [ ┃←Trim out ] [ Split @┃ ] [ Move→┃ ] [ Duplicate ] [ Delete ] [ Undo (0) ]
[ Check ] [ Render draft ] [ Reload ] prompt context: on
Ask Claude › change what? (or just type in the main prompt)
graphics
▸ el-03-demo ····████┃······················· 9–16
el-04-feature ········█████···················· 15.5–22.1
インストール
claude plugin marketplace add leepokai/claude-mod-cutroom
claude plugin install cutroom@claude-mod-cutroom
インストールせず 1 セッションだけ使う場合は、claude --plugin-dir /path/to/claude-mod-cutroom。このフォルダーへのシンボリックリンクを ~/.claude/skills/cutroom に置けば、すべてのセッションで自動ロードされます。
要件は Node 22、PATH 上の ffmpeg と curl、HyperFrames Claude Code プラグイン(claude plugin install hyperframes@hyperframes。Cutroom はキャッシュされた CLI ランチャーを使用)または npx hyperframes を実行できるネットワーク接続です。フレームプレビューは kitty グラフィックスプロトコルを話すターミナル(kitty、Ghostty)と Claude デスクトップアプリでは実ピクセルを描き、それ以外のターミナルではハーフブロックを使います。
使い方
- HyperFrames プロジェクト(または
videos/*を含むリポジトリなど、その親)へcdして/cutと入力します。Studio はバックグラウンドで起動してブラウザに開き、ペインはトランスクリプトの横に開きます(フルスクリーンレイアウトでは 110 カラムからドックされ、それ以外ではプロンプトの上)。カレントディレクトリにhyperframes.jsonがあれば、ブラウザを起動せずセッション開始時にペインが自動で開きます。/cut <dir>は指定したプロジェクトを開き、候補が複数ある場合はペインにボタンとして表示します。 - **見る。**ペインには再生ヘッド下のフレームが表示されます。Studio のサムネイル API は約半秒で描画します。
▶(p)でスライドショーとして再生でき、タイムラインの 0.5 秒ごとに 1 フレームを、フレームが届く速さで表示します。|◀ -1s -.1 +.1 +1s ▶|でスクラブします(ペインにフォーカスがある間のホットキーはa j h l k f。ctrl+x tab、またはクリック);t=で時刻へ移動し、⟳(r)で再キャプチャします。 - **指す。**Studio のキャンバスまたはタイムラインで何でもクリックします。ペインは 1.5 s ごとに Studio の選択をポーリングして表示し、それを含むクリップに対応付け、再生ヘッドを Studio の時刻へ移動します。ペインの行(または
1–9)で Studio を使わずトップレベルのクリップを選べます。 - CLI 自身の編集でカットする(一つごとに取り消し可能な
hyperframes timeline …呼び出し):Trim in→┃(i)はクリップを再生ヘッドから開始し、┃←Trim out(o)はそこで終了、Split @┃(s)は<id>-2を作成、Move→┃(m)は長さを維持、Duplicate(d)は<id>-copyを作成、Delete(x)、Undo(u)はペインで直前に行った編集を戻します(レシートは<project>/.hyperframes/cutroom/にあります)。Studio にはそこで行ったドラッグ用の独自の取り消し履歴があります。 - **伝える。**プロジェクトが開いていて
prompt contextがオンのとき(tで切り替え)、Claude Code のプロンプトに入力する各メッセージには Studio の選択、ホストするクリップ、再生ヘッド、スナップショットパス、簡潔なタイムラインが付きます。そのため "把這個標題放大" または "cut this scene 1s shorter" だけで十分です。ペイン内のAsk Claude ›ボックスも同じ情報を送ります。ターン終了時にペインはタイムラインとフレームを再読み込みし、Studio 自身も再読み込みします。 Check(c)はhyperframes check --jsonを実行し、Render draft(v)はrenders/draft.mp4を書き、Reload(z)はタイムラインを読み直します。
試してみる
- まだプロジェクトがなければ
npx hyperframes init demoで作成します。 - Claude Code で
/cut demoと入力します。Studio がブラウザで開き、ペインに最初のフレームが表示されます。▶を押してから Studio のタイムラインでクリップをクリックし、ペインが追従する様子を見ます。 - プロンプトに "make the title 20% larger" と入力します。Claude がコンポジションを編集し、Studio とペインが再読み込みされます。
レイアウト
Claude Code の mod は 3 つのファイルと型コントラクトで構成されます(Claude Code 内の plugin-authoring スキルを参照)。このリポジトリはそのような mod の一つであり、自身のプラグインマーケットプレイスも兼ねています。
.claude-plugin/plugin.json manifest
.claude-plugin/marketplace.json lets `claude plugin marketplace add` point here
hooks/hooks.json names the hooks module
hooks/register.tsx the whole mod: CLI runner, state atoms, edit
verbs, Studio bridge, prompt composer, Pane render
types/index.d.ts the $.state contract the pane draws from
tests/editor.test.tsx claude plugin test .
claude plugin validate .はエンジンが見るすべての hook と$呼び出しを一覧表示します。claude plugin test .は実際のエンジンに対してテストを実行し、プラグインの下の世界(fs、process、http、store、env、clock)にはテストが答えます。クリップ一覧、ネストした行の非表示、選択、シーク、正確な argv でSplitが CLI に届くこと、クリップ外の分割が実行前に拒否されることを検証し、Studio をモックした場合は選択ポーリングがペインに入り、次に入力したプロンプトのコンテキストとして使われることも確認します。- 所有するフォルダーからロードすると、エンジンは API 宣言を
.claude-plugin/types/の下に配置し、tsc -p .が mod を型チェックします。
ライセンス
MIT、LICENSE を参照。
インストール
まず作者の README で marketplace とプラグイン名を確認してください。コマンドはリポジトリの構成によって変わる場合があります。
claude plugin marketplace add leepokai/claude-mod-cutroom claude plugin install cutroom
原文 / README
claude-mod-cutroom
Cutroom is a cutting room for HyperFrames videos that lives inside Claude Code. One command opens HyperFrames Studio in your browser (the real preview and timeline), puts a live frame thumbnail and the cut buttons in a Claude Code pane, and makes Claude aware of what you have selected in Studio, so "make this bigger" needs no further pointing.
It is deliberately not another NLE. Studio is the canvas. Every cut the pane
makes is one HyperFrames CLI call (timeline, snapshot, check, render),
and everything a button cannot say goes to Claude as a prompt that already
carries the project, the Studio selection, the playhead, the frame snapshot
and the timeline.
my-launch · 45s · Studio ● [open Studio ↗] localhost:3061/#project/my-launch
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← the frame under the
█████████████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀████ playhead, as half-block
████████████████ Message your coding agents ████████████████ cells in any terminal,
████████████████ like teammates. ████████████████ real pixels on kitty /
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Ghostty and the desktop app
▶ |◀ -1s -.1 12.5s +.1 +1s ▶| ⟳ t=____ seek
Studio: 03 Demo · compositions/frames/03-demo.html
[ Trim in→┃ ] [ ┃←Trim out ] [ Split @┃ ] [ Move→┃ ] [ Duplicate ] [ Delete ] [ Undo (0) ]
[ Check ] [ Render draft ] [ Reload ] prompt context: on
Ask Claude › change what? (or just type in the main prompt)
graphics
▸ el-03-demo ····████┃······················· 9–16
el-04-feature ········█████···················· 15.5–22.1
Install
claude plugin marketplace add leepokai/claude-mod-cutroom
claude plugin install cutroom@claude-mod-cutroom
For one session without installing: claude --plugin-dir /path/to/claude-mod-cutroom.
A symlink to this folder under ~/.claude/skills/cutroom also auto-loads it in
every session.
Requirements: Node 22, ffmpeg and curl on PATH, and either the hyperframes Claude
Code plugin (claude plugin install hyperframes@hyperframes, whose cached CLI
launcher Cutroom uses) or network access for npx hyperframes. The frame
preview draws real pixels in terminals that speak the kitty graphics protocol
(kitty, Ghostty) and in the Claude desktop app, and half-block cells in every
other terminal.
Use
cdinto a HyperFrames project (or its parent, e.g. a repo withvideos/*) and type/cut. Studio starts in the background and opens in your browser; the pane opens beside the transcript (docked in the fullscreen layout from 110 columns, else above the prompt). Withhyperframes.jsonin the cwd the pane opens by itself at session start (without launching a browser)./cut <dir>opens a specific project; with several candidates the pane lists them as buttons.- Look. The pane shows the frame under the playhead: Studio's thumbnail
API renders it in about half a second.
▶(p) plays it as a slideshow, one frame every 0.5 s of timeline, as fast as frames arrive.|◀ -1s -.1 +.1 +1s ▶|scrub (hotkeysa j h l k fwhile the pane has focus: ctrl+x tab, or click it);t=seeks to a time;⟳(r) re-captures. - Point. Click anything in Studio, on the canvas or in its timeline. The
pane polls Studio's selection every 1.5 s, shows it, maps it to the clip
that hosts it, and moves the playhead to Studio's time. Rows in the pane
(or
1–9) select a top-level clip without Studio. - Cut with the CLI's own edits (each one
hyperframes timeline …call, undoable withUndo):Trim in→┃(i) starts the clip at the playhead;┃←Trim out(o) ends it there;Split @┃(s) makes<id>-2;Move→┃(m) keeps the length;Duplicate(d) makes<id>-copy;Delete(x);Undo(u) restores the previous pane edit (receipts in<project>/.hyperframes/cutroom/). Studio keeps its own undo for drags made there. - Say it. Just type in Claude Code's prompt: while a project is open and
prompt contextis on (ttoggles it), every prompt you type carries the Studio selection, the hosting clip, the playhead, the snapshot path and a compact timeline, so "把這個標題放大" or "cut this scene 1s shorter" is enough. TheAsk Claude ›box does the same from inside the pane. When the turn ends the pane reloads the timeline and the frame; Studio reloads itself. Check(c) runshyperframes check --json;Render draft(v) writesrenders/draft.mp4;Reload(z) re-reads the timeline.
Try it
- Make a project if you have none:
npx hyperframes init demo. - In Claude Code:
/cut demo. Studio opens in the browser; the pane shows the first frame. Press▶, then click a clip in Studio's timeline and watch the pane follow. - Type in the prompt: "make the title 20% larger". Claude edits the composition; Studio and the pane reload.
Layout
A Claude Code mod is three files plus a type contract (see the
plugin-authoring skill inside Claude Code). This repo is one such mod and
doubles as its own plugin marketplace.
.claude-plugin/plugin.json manifest
.claude-plugin/marketplace.json lets `claude plugin marketplace add` point here
hooks/hooks.json names the hooks module
hooks/register.tsx the whole mod: CLI runner, state atoms, edit
verbs, Studio bridge, prompt composer, Pane render
types/index.d.ts the $.state contract the pane draws from
tests/editor.test.tsx claude plugin test .
claude plugin validate .lists every hook and$call the engine will see.claude plugin test .runs the tests against the real engine, with the world beneath the plugin (fs, process, http, store, env, clock) answered by the tests: clips list, nested rows hidden, select, seek,Splitreaching the CLI with the exact argv, a split outside the clip refused before anything runs; and with Studio mocked, the selection poll landing in the pane and riding the next typed prompt as context.- Once loaded from a folder you own, the engine lays its API declarations under
.claude-plugin/types/, andtsc -p .type-checks the mod.
License
MIT, see LICENSE.

