Claude Code plugin for video editing, transcoding, video processing, and multimedia workflow automation.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin video-editingReference for the video-editing plugin's per-user data store. Other skills in this plugin (setup-index, profile-system, render-profiles, setup-nas, etc.) read and write to this location. Linux-only — Windows users will need to fork. Don't invoke directly; this is documentation other skills consult.
Run an agentic / LLM-driven cut-down on a long video — "make a 60-second highlight reel of this hour-long stream", "cut the boring parts from this lecture", "find the best moments in this footage". Wraps `video-use` (browser-use) by default; falls back to `VideoAgent` (HKU) for research-grade understanding. Both come from the shared uv venv set up by `deps-setup`. Outputs a cut-list (timestamps + reasons) and an optional rendered preview.
Extract audio from a video (or analyze a standalone audio file) and report loudness — integrated LUFS, true peak (dBTP), loudness range — against a target like YouTube (-14 LUFS) or broadcast (-23 LUFS). Use when the user says "check loudness", "is this normalized", "extract the audio", "audio analysis", or "what LUFS is this". Read-only on the source — does not normalize.
Turn an audio file into a music video by compositing a waveform / spectrum / circular-CQT animation over cover art or a background. Templates (waveform-bottom, spectrum-bars, circular-cqt-cover, etc.) are saved in preferences.json so the user can pick by name. Use when the user says "make a music video from this audio", "audio to video with waveform", "render this song with a visualizer", "spectrum animation over cover art".
Remove silent / dead-air segments from a video or audio file using auto-editor. Use when the user says "cut the silences", "remove dead air", "tighten this up", "auto-edit this", "trim the gaps". Requires auto-editor installed via deps-setup (lives in the plugin's shared uv venv). Outputs a tightened copy alongside the source; original is preserved.
Overlay graphics onto a video — lower thirds, watermarks/logos, image overlays, or text titles — at specified timestamps. Use when the user says "add a watermark", "put my logo in the corner", "burn in a lower third", "add a title card", "overlay this PNG at 0:30". Multiple overlays in one pass; each can have its own time range and position.
Generate subtitles (whisper.cpp / faster-whisper) for a video and either save the SRT alongside or burn them into the picture. Use when the user says "subtitle this", "add captions", "burn subtitles", "transcribe and caption this video", "generate SRT for this". Accepts an existing SRT instead of regenerating. Picks the user's preferred whisper backend from preferences.json (set via onboard).
Clean up a raw whisper transcript (SRT or TXT) — strip filler words, fix recurring mistranscriptions via a per-project glossary, and (optionally) re-flow line breaks. Use when the user says "clean this transcript", "remove the ums", "fix the transcription", "tidy up the SRT before burning". Pairs with burn-subtitles (run before burning) and generate-deliverables.
Build a named, reusable render profile (codec + resolution + bitrate/QP + container) by iterating on a 30-second test clip until file size and quality are right. Use when the user says "create a render profile", "tune my YouTube preset", "I want a render preset for archival", or is frustrated with bloated GPU-encoded files. Saves to render-profiles.json for later use by render-with-profile and transcode.
Extract one or more time-range segments from a video. Use when the user says "cut from 1:30 to 3:45", "trim the first 30 seconds", "extract these segments", "split this clip at 5:00". Stream-copies losslessly by default; offers a frame-accurate re-encode mode when the cut must be exact. Multiple segments are written as separate files (or optionally stitched in one pass).
Find duplicate or near-duplicate clips in a folder. Two modes — `exact` (sha256 of file bytes, fastest, catches true duplicates) and `perceptual` (sample frames + dHash, catches re-encodes / format converts of the same source). Use when the user says "find duplicate clips", "dedupe this folder", "remove duplicate videos", "flatten and dedupe". Quarantines duplicates to `_duplicates/` by default; never deletes without explicit confirmation.
Delete a saved render profile by name. Use when the user says "delete the <name> render profile", "remove my <name> preset", or "clean up old render profiles".
Install optional video-editing tools (moviepy, auto-editor, video-use, VideoAgent, vit, LosslessCut, editly) plus media-inspection helpers (exiftool, mediainfo). Lets the user pick which to install; Python tools share a single uv-managed venv recorded in preferences.json. Use when the user says "install video tools", "set up moviepy", "install auto-editor", "deps setup", "install lossless cut", "install mediainfo", "install exiftool".
Render a video from a declarative editly JSON spec (clips, transitions, titles, audio mix). Use when the user says "render this editly spec", "compose this slideshow", "make a video from this JSON", "editly render". Validates the spec, runs editly headlessly, and reports the deliverable. Editly must be installed via `deps-setup` (npm-global).
For a finished video, generate one or more publishing deliverables — thumbnail (poster frame), description (LLM summary), transcription (SRT/TXT), or all three. Use when the user says "generate deliverables", "make a thumbnail and description for this", "package this for upload", "give me the YouTube assets". Each deliverable is individually requestable.
Build a karaoke-style music video from a source video or song — separate stems with Demucs, attenuate (or remove) the lead vocal, then burn animated lyric subtitles with music-note glyphs synced to the song. Accepts an existing LRC/SRT lyric file, or whisper-transcribes the original vocal as a fallback. Use when the user says "make this karaoke", "remove the vocals and add lyrics", "karaoke version", "instrumental with lyrics".
List the user's saved render profiles with their codec, resolution, and rate-control summary. Use when the user says "list my render profiles", "what presets do I have", "show me my render profiles", or similar.
Extract a single track (audio, subtitle, video) from a Matroska container to its own file using mkvextract. Use when the user says "pull out this audio track", "extract the subtitles", "save this audio as a separate file", "get the SRT from this MKV". No re-encode.
Set which audio or subtitle track plays by default in a Matroska container using mkvpropedit. Use when the user says "set the default audio", "make this subtitle track default", "this audio language should play first", "change the default track". Idempotent, no re-encode.
Remove unwanted tracks (audio, subtitle, video) from a Matroska container and save a new, smaller file. Use mkvmerge syntax (-a, -s, -d to keep tracks; -A, -S, -D to drop all of a type). Use when the user says "remove this audio track", "drop all subtitles except English", "keep only this video and audio", "make this file smaller". No re-encode.
Inspect tracks in a Matroska (MKV) container and display a formatted table showing track number, type (video/audio/subs), codec, language, default flag, and track name. Use when the user asks "what's in this MKV", "list the tracks", "show audio/subtitle languages", "inspect this file before editing".
Render an MLT XML timeline (Kdenlive `.kdenlive` project or raw `.mlt`) to a deliverable using the `melt` CLI. Use when the user says "render the timeline", "render this kdenlive project to mp4", "melt render", "headless render". Supports an optional named render profile from the data store, otherwise asks for codec/bitrate/resolution/fps inline.
Create a new video project workspace inside the user's registered video index. Use when the user says "new video project", "create a project called X", "scaffold a new video", or similar. Creates a project subfolder with raw, proxies, working, renders, exports, assets layout and an optional git init.
Apply ffmpeg loudnorm (two-pass EBU R128) to a video or audio file, hitting the user's preferred LUFS / true-peak target (or one specified inline). Use when the user says "normalize this", "fix the levels", "make this -14 LUFS", "loudnorm this", "normalize for YouTube/podcast/broadcast". Pairs with audio-analysis (analyze recommends, this skill applies). Re-muxes video stream-copy when the input is video.
First-run setup for the video-editing plugin — collect per-user preferences (talking-head EQ preset, default loudness target, default render target) and write them to preferences.json. Use when the user says "onboard the video plugin", "set up my preferences", "register my voice EQ", "configure video editing", or when another skill (e.g. talking-head-eq) reports a missing preset.
Open a project's working directory (or a specific .kdenlive file) in Kdenlive. Use when the user says "open this in Kdenlive", "launch the editor for project X", "edit this in Kdenlive". If the project has no .kdenlive file yet, opens the working/ folder via the file dialog so the user can start fresh.
Open the user's registered video index — the base directory holding all video projects. Use when the user says "open my video index", "open my video workspace", "show me my video projects", or similar. Reads the path from index.json and opens a terminal there.
Detect the user's GPU and ffmpeg hardware encoders (NVENC, VAAPI, QSV, AMF) and persist the result to system-profile.json. Run this once per machine before using render-profile or transcode skills. Use when the user says "profile my system", "detect my GPU", "what encoders do I have", or before any render skill that complains about a missing profile.
Rsync raw video clips from the registered NAS into the active project's raw/ folder. Use when the user says "pull from NAS", "import my footage", "grab clips from the archive into project X", or similar. Reads nas.json + index.json. Supports dry-run preview, optional date/extension filters, and resumable transfers.
Rsync finished renders from a project's renders/ or exports/ folder up to the registered NAS archive. Use when the user says "push to NAS", "archive these renders", "send the final cut to the archive", or similar. Reads nas.json + index.json. Dry-run preview by default, optional per-project subfolder on the archive side.
Assemble a single video from a folder of clips — concat in a chosen order, optionally with crossfade transitions, normalized to a target resolution/fps. Use when the user says "stitch this folder into one video", "render-from-library", "concat the clips in folder X", "make a montage from these clips". Lossless concat path when all clips share codec/params; transcoding fallback otherwise.
Render one or more video files using a previously saved render profile. Use when the user says "render these clips at YouTube 1080p", "apply my <profile> preset", "batch render this folder with <profile>", or similar. Reads render-profiles.json + system-profile.json; writes outputs to a renders/ folder.
Remove accidental short takes from a clip folder — clips below a minimum duration (default 3s), or below a minimum filesize, that are typically the result of a fumbled record button. Use when the user says "scrub the short takes", "remove accidental clips", "clean up the takes folder". Moves clips to a `_rejected/` subfolder by default; only deletes on explicit confirmation.
Register or create the user's video index — the base directory that holds all their video projects. Use on first run, or when the user says "set up my video index", "register my video workspace", "change my video index path", or similar. Persists the path so other skills can find it.
Register a NAS (or any remote/mounted) location for video raw ingest and finished-render archive. Use when the user says "set up my NAS", "register my video archive", "configure NAS for video", or similar. Persists path(s) to nas.json so pull-from-nas and push-to-nas can find them.
Sort a folder of media files into subfolders by a chosen attribute — resolution (e.g. 4K vs 1080p), aspect ratio (16:9, 9:16, 1:1), framerate, codec, or media kind (photo vs video). Use when the user says "separate the 4K clips", "split photos and videos", "sort by aspect ratio", "organize this folder by resolution". Moves files; never modifies content. Dry-run preview by default.
Apply the user's saved voice/dialogue EQ preset to the audio of a video (or a standalone audio file) and re-mux. Use when the user says "EQ this talking head", "apply my voice preset", "clean up the audio for this video", or similar. Reads the preset from the per-user data store (registered via the onboard skill). Supports EasyEffects JSON, raw ffmpeg filter strings, and band-list JSON formats.
Ad-hoc transcode of a video file or folder — pick codec, container, resolution, framerate, and rate-control on the spot. Uses the hardware encoder detected by profile-system when available, falls back to libx264/libx265. Use when the user says "transcode this", "convert these to h.265", "change the framerate to 30", "make these smaller", or "VBR to CBR".
Generate a folder of low-resolution frame snapshots at evenly spaced timestamps so Claude (or you) can "see" a video without ingesting the full file. Use when the user says "give me a visual timeline", "let me see this video", "show me frames from this", "white balance check", "what does this video look like", or any request where Claude needs visual context about a video. Output is a folder of small JPEGs plus a timeline.md index.
Render a labeled before/after preview clip showing a proposed white-balance, color, or exposure correction. Use when the user (or Claude) wants to evaluate a color tweak before committing to a full re-render — e.g. "show me what +500K would look like", "preview this WB fix", "before/after on the color correction". Output is a short side-by-side or sequential MP4 with on-screen labels.
This Claude Code plugin is part of my public marketplace.
To install the marketplace:
/plugin marketplace add https://github.com/danielrosehill/Claude-Code-Plugins
Plugin Installation:
To install this plugin:
/plugin install video-editing@danielrosehill
Claude Code plugin for video slash commands and agents.
/plugin marketplace add danielrosehill/CC-Plugin-video
/plugin install video@danielrosehill
Daniel Rosehill
This plugin is licensed under the MIT License.
FFmpeg CLI reference for video and audio processing, format conversion, encoding, filtering, and media automation
Share bugs, ideas, or general feedback.
Videoclaw CLI skills for AI video generation workflow
Claude Code skill pack for Runway (18 skills)
Process videos using VideoDB Python SDK. Upload, search, edit, generate subtitles, transcode, capture, and stream — all via natural language.
AI-powered video processing toolkit - download videos, remove silence, trim/cut, extract audio, transcribe, generate descriptions, upload to YouTube and Bunny.net
Reliable automation, in-depth debugging, and performance analysis in Chrome using Chrome DevTools and Puppeteer
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claim