michael-obele/openscreen-tmcp/openscreen
Claude Code and agent skill by michael-obele/openscreen-tmcp
- community
Checking that the SKILL.md file is still in the repository.
Edit a screen recording in the OpenScreen app through the openscreen-tmcp MCP tools — cut silences, tighten pacing, place zooms on clicks, fix captions, add annotations, move clips. Use whenever the user asks to edit, tighten, polish, trim, caption or zoom a screen recording, or refers to "the recording", "the take", "my demo video", "dead air", or an OpenScreen project.
Install
npx vskill@latest install michael-obele/openscreen-tmcp/openscreenSKILL.md
Editing video in OpenScreen
You drive the OpenScreen app, which has a screen recording open in its editor. Your tools act on that live document. Every edit lands immediately and the user can undo it with Ctrl/Cmd + Z.
Start every session the same way
readwithaction: "project"— see the assets, the placed clips, and existing trims/modifiers. Never edit blind.- If the user talks about what was _said_,
readwithaction: "transcript"(or"words"for word-level ids). readwithaction: "frames": actually SEE the recording. Use it before placing a zoom, a trim or an annotation:{"action":"frames","count":6}gives the shape of the whole take with timestamps burned in when a caption font is found (a falseburnInin the reply means none were drawn),{"action":"frames","mode":"frame","at":[14.18]}gives the exact frame at a moment you already know. Times are source seconds (like trims), not the edited timeline.detail:"high"when you must read text on screen.- Then act.
The one rule that causes the most damage
There are two time bases. Do not mix them.
| Thing | Base | Meaning | |
|---|---|---|---|
clips, setRange, all trim actions | SOURCE seconds | Position inside the original recording file | |
zooms, speed, annotations, camera, audio (effect) | VIRTUAL seconds | Position on the edited timeline, _after_ clips and trims are applied |
Cutting 10 seconds out of the middle of the first clip moves every later zoom 10 seconds earlier on the virtual timeline. So order matters:
Cut first, then decorate. Do all trimming, then place zooms/annotations/audio. If you must add an effect before cutting, re-check it afterwards withread action: "project".
Deletions are real deletions
Use trim action: "remove" for a trim, clip action: "remove" for a clip, effect action: "remove" for a modifier. Never fake a deletion by re-adding something or zeroing it out — that leaves the element in the document and misreports what you did.
Recipes
Tighten pacing / cut dead air
read action: "transcript"→ the silence segments give you the gaps (start/end).trimwithaction: "addMany"and the whole list in one call — not one call per gap.- Only include gaps actually worth removing (roughly ≥ 0.4 s). Leave short breaths; a totally gapless take sounds robotic.
- Re-
readto confirm.
Zoom on the places that matter
- Fastest, most reliable:
read action: "project"and look at the recorded clicks (auto-zoom in the app is planned from clicks). - Cursor-driven: if
assets[].hasCursorTelemetryis true,read action: "cursor"returns where the pointer went over time. Dwells and direction changes tell you where attention was — place zooms there. - Then
effectwithaction: "addMany"-style batching viaregions, or oneaction: "add"per span.
`depth` is an ordinal, not a multiplier: 1→1.25×, 2→1.50×, 3→1.80×, 4→2.20×, 5→3.50×, 6→5.00×. Asking for depth: 2 gives 1.50×, not 2×.
focusX/focusY are 0–1 fractions of the frame, not pixels. 0.5, 0.5 is centred.
Fix captions
read action: "words"to get word ids.captionwithwordId+ correctedtext, one word at a time.
Captions are rendered from this transcript, so a correction changes the burned-in text.
Many edits at once
Use apply to send an ordered list of operations in a single call. It is ordered, not atomic: on failure it stops and tells you exactly which operations landed. Never describe it as "all or nothing".
Time bases in one line
trim and clip sourceStartSec/sourceEndSec = source. Everything in effect = virtual.
When something fails
- _"not reachable"_ → the OpenScreen app is closed, or AI settings → MCP server is off.
- _"Project edits"_ (upstream wording) → edits are switched off in OpenScreen's MCP server section. Tell the user; do not retry.
- _"token rejected"_ → the token was regenerated. Tell the user to regenerate and update their MCP config.
framesreturnsTried:with a list of paths; the recording moved. Passpath, or reopen the project in OpenScreen so it relinks.
Report the real reason. Never summarise an upstream refusal into something vaguer.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/openscreen/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/michael-obele/openscreen-tmcp/openscreen)