Skill detail
editor
AI-native local video editor wrapping FFmpeg in 19 deterministic tools for trimming, splicing, captions, zoom, and rendering.
Needs (stated): Node.js
Inspect before use
Automated review checks relevance, not safety or endorsement. Read the source instructions before using this skill.
SKILL.md
The saved excerpt is a snapshot from review. The external source remains the complete and most current version.
---
name: editor
description: AI-native video editor for any agent. Use when the user asks to edit, trim, splice, caption, zoom into, add a title card, transition between, remove silence from, chroma-key, stabilize, or render video files. Wraps FFmpeg in 19 deterministic tools and a session log; runs locally; no generative AI.
license: MIT
compatibility: Requires Node 24+. FFmpeg is auto-downloaded via ffmpeg-static on first use; override with MAKEMYCLIP_FFMPEG_PATH.
metadata:
author: makemyclip
homepage: https://github.com/MakeMyClip/editor
runtime: node
install: npx skills add MakeMyClip/editor
---
# MakeMyClip Editor — Agent Skill
Drive a local video editor by chatting. When triggered, this skill shells out to the `clip` CLI via `npx` (auto-downloaded on first use, cached after). No MCP setup, no global install, no config edits.
## When to invoke
Trigger this skill when the user asks to:
- Edit, trim, cut, or splice a video file
- Zoom, pan, or apply Ken Burns to a region of a clip
- Add captions, titles, or lower-thirds to footage
- Assemble multiple clips into one (concat, montage)
- Render a screen recording into a demo or social clip
Do **not** invoke for: pure transcription (use a speech-to-text skill), thumbnail-only image work, or live streaming.
## How to use
### Probe a media file (implemented)
```bash
npx -y @makemyclip/editor ingest <input>
```
Returns metadata as JSON — duration, video stream (codec, dimensions, fps), audio stream (codec, sample rate, channels), plus a deterministic `mediaId` derived from the absolute path:
```json
{
"mediaId": "m_a1b2c3d4e5f6",
"ref": {
"path": "/abs/path/screen.mp4",
"durationSec": 83.5,
"video": { "codec": "h264", "width": 1920, "height": 1080, "fps": 30 },
"audio": { "codec": "aac", "sampleRate": 48000, "channels": "stereo" }
}
}
```
Call this first to ground yourself in what the source actually contains — duration for trim calculations, dimensions for zoom/overlay placement, presence of audio before suggesting `add_audio`. Same input path always returns the same `mediaId`.
### Split a clip at a point (implemented)
```bash
npx -y @makemyclip/editor split <input> <atSec>
```
Divides a clip into two halves at `atSec`. Stream-copy (no re-encode), so it's fast — both halves are produced in parallel. Returns paths to both:
```json
{ "before": "/var/folders/.../split-before-abc.mp4", "after": "/var/folders/.../split-after-xyz.mp4", "atSec": 12.5, "durationMs": 38 }
```
Keyframe-accurate (not frame-exact) because stream-copy can't decode-and-cut mid-GOP. If you need a frame-exact split, run `render` first to re-encode, then `split`.
### Trim a clip (implemented)
```bash
npx -y @makemyclip/editor trim <input> <start> <end>
```
Timecodes accept `HH:MM:SS[.ms]`, `MM:SS`, or seconds as a number. The output is JSON:
```json
{ "path": "/var/folders/.../makemyclip-editor/trim-abc123.mp4", "durationMs": 14 }
```
Trim is stream-copy (no re-encode), so it's fast and lossless. Output lands in `$MAKEMYCLIP_WORKSPACE` (defaults to `os.tmpdir()/makemyclip-editor`).
### Add a text overlay (implemented)
```bash
npx -y @makemyclip/editor add_text <input> <text> <position> <startSec> <endSec>
```
Burns a text overlay into a copy of the video.
- `<position>` is one of: `top-left`, `top-center`, `top-right`, `center-left`, `center`, `center-right`, `bottom-left`, `bottom-center`, `bottom-right`
- `<startSec>` / `<endSec>` are seconds from the start of the input
- Defaults: font size 48, white text, translucent black background box for readability
Returns JSON:
```json
{ "path": "/var/folders/.../makemyclip-editor/add-text-abc123.mp4", "durationMs": 412 }
```
The text is written to a temp file before being passed to ffmpeg, so quotes, colons, commas, brackets, and most Unicode work without manual escaping. Caveat: literal `%{...}` in the text would be interpreted as a drawtext expression (rare in real captions; avoid).
### Stitch clips togetheRead the full source on GitHub (opens external page)