{"owner":"WyattBlue","repo":"auto-editor","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":6659,"categories":["anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["skills/auto-editor-export/SKILL.md","skills/auto-editor/SKILL.md","skills/auto-editor-transcribe/SKILL.md","skills/auto-editor-effects/SKILL.md"],"skills":{"skills/auto-editor-export/SKILL.md":"---\nname: auto-editor-export\ndescription: Export auto-editor's edit or microphone recording to a video editor (Premiere, DaVinci Resolve, Final Cut Pro, ShotCut, Kdenlive), to individual clips, or to auto-editor timeline files (.v1/.v2/.v3); and import timeline/XML files to render them. Use when someone wants an editor-ready project, a preserved microphone source, split clips, or timeline files instead of a finished video.\n---\n\n# Exporting & importing\n\nBy default auto-editor renders a media file. `--export` (`-ex`) changes the\ntarget. The output extension is chosen automatically per mode.\n\n```bash\nauto-editor video.mp4 --export premiere    # → video_ALTERED.xml for Premiere Pro\n```\n\n## Export targets\n\n| `--export` | For | Output |\n|---|---|---|\n| `premiere` | Adobe Premiere Pro (fcp7 xml) | `.xml` |\n| `resolve` | DaVinci Resolve (fcpxml) | `.fcpxml` |\n| `resolve-fcp7` | Resolve via legacy fcp7 xml | `.xml` |\n| `final-cut-pro` | Final Cut Pro | `.fcpxml` |\n| `shotcut` | ShotCut | `.mlt` |\n| `kdenlive` | Kdenlive | `.kdenlive` |\n| `clip-sequence` | individual media clips, one per kept segment | media files |\n| `v1` / `v2` / `v3` | auto-editor timeline files | `.v1` / `.v2` / `.v3` |\n| (default) | rendered media file | per container |\n\n```bash\nauto-editor video.mp4 --export resolve\nauto-editor video.mp4 --export final-cut-pro\nauto-editor video.mp4 --export clip-sequence\nauto-editor video.mp4 --export v3 -o timeline.v3\n```\n\n## Export a microphone recording\n\nUse `:mic` as the input and press Ctrl-C to finish capture. Editor and timeline\nexports keep a sibling `*_RECORDING.mka` source so the project remains usable:\n\n```bash\nauto-editor :mic --export resolve -o interview.fcpxml\n# writes interview.fcpxml and interview_RECORDING.mka\n```\n\nWith `-c:a auto` (the default), persistent recordings use lossless FLAC.\nChoose another Matroska-supported encoder explicitly; unsupported encoders fail\nbefore capture. Encoder sample rates and channel layouts are negotiated during\nthe recording transcode.\n\n```bash\nauto-editor :mic --export resolve -c:a opus -o interview.fcpxml\nauto-editor :mic --sample-rate 44.1kHz --export v3 -o interview.v3\n```\n\nOrdinary rendered outputs and `clip-sequence` use a temporary capture instead;\ntheir final audio codec still follows the output container and `-c:a`.\n\n## Naming the timeline\n\n`premiere`, `resolve`, and `final-cut-pro` accept a `name` attr (default\n\"Auto-Editor Media Group\"). Pass extra attrs after a colon:\n\n```bash\n# POSIX shells\nauto-editor example.mp4 --export 'premiere:name=\"Your name here\"'\n# PowerShell (double the inner quotes)\nauto-editor example.mp4 --export 'premiere:name=\"\"Your name here\"\"'\n```\n\n`final-cut-pro` and `resolve` also accept `version`, the FCPXML version to write: `11`\n(default) for FCPXML 1.11, or `10` for FCPXML 1.10, for an older editor that can't\nread 1.11.\n\n```bash\nauto-editor example.mp4 --export final-cut-pro:version=10\n```\n\n## Split into clips without further editing\n\nTo split at the cut points but make no other edits, set both actions to `nil`:\n\n```bash\nauto-editor example.mp4 -w:0 nil -w:1 nil --export premiere\n```\n\n## Importing timelines\n\nauto-editor reads timeline/XML files as inputs and renders them like any media:\n\n```bash\nauto-editor myFcp7File.xml -o render.mp4    # render an fcp7 xml (experimental)\nauto-editor timeline.v3 -o render.mp4       # render an auto-editor timeline file\n```\n\nImporters: auto-editor timeline files (`.v1`, `.v2`, `.v3`) and FCP7 XML\n(experimental). The input format is detected by extension. PRs for more importers\nare welcome.\n\n## Timeline format notes\n\n`.v1`/`.v2`/`.v3` are auto-editor's own timeline formats; `.v3` is the current\nlayered format (supports stacked tracks / overlay compositing). See\n<https://auto-editor.com/docs/v3> (and `/docs/v1`, `/docs/v2`). Export a timeline\nto inspect or hand-tweak the edit, then re-import it to render.\n\nFor plain rendering, edit methods, and pace, see the **auto-editor** skill.\n","skills/auto-editor/SKILL.md":"---\nname: auto-editor\ndescription: Record a microphone or edit video/audio with the auto-editor CLI — cut out dead space (silence, motionlessness, black frames), set the pace, make manual cuts, and render the result. Use when someone wants to capture and trim a microphone, remove silence, shorten a recording, speed through quiet parts, or otherwise edit media with auto-editor.\n---\n\n# Editing with auto-editor\n\nauto-editor analyzes a media file, marks every timebase section as **active**\n(e.g. loud) or **inactive** (e.g. silent), then applies an action to each. The\ndefaults: keep active sections unchanged, **cut** inactive ones.\n\n```bash\nauto-editor path/to/video.mp4          # writes video_ALTERED.mp4\nauto-editor video.mp4 -o out.mp4       # choose the output name\n```\n\nRun the installed `auto-editor`, or `./auto-editor` from this repo. `auto-editor\ninfo FILE` shows streams/codecs/duration; `--preview` prints what *would* be cut\nand exits without rendering — use it to sanity-check before a long render.\n\n## Record and edit a microphone\n\nUse `:mic` as the input on macOS, Windows, or Linux. Stop capture gracefully\nwith Ctrl-C; auto-editor then analyzes and edits the recording normally.\n\n```bash\nauto-editor :mic                                      # → mic_ALTERED.wav\nauto-editor :mic --sample-rate 44.1kHz -o trimmed.m4a\nauto-editor :mic --edit audio:threshold=6%\n```\n\nAll normal edit, action, and rendering options apply. Editor and timeline\nexports preserve the source capture separately; use the **auto-editor-export**\nskill for recording-codec and naming details.\n\n## 1. Choose what counts as \"active\" — `--edit METHOD`\n\n`audio:threshold=0.04,stream=all` is the default. Threshold takes a 0–1 fraction\nor a `dB` value (case-sensitive).\n\n| Method | Marks active when… | Key args (defaults) |\n|---|---|---|\n| `audio` | loudest sample ≥ threshold | `threshold=0.04`, `stream=all` |\n| `motion` | frame-to-frame change ≥ threshold | `threshold=0.02`, `stream=0`, `width=400`, `blur=9` |\n| `blackdetect` | frame is mostly black | `threshold=0.98`, `pixel-black=0.10` (wrap in `not` to cut black) |\n| `subtitle`/`regex` | a subtitle line matches `pattern` | `pattern` (required), `ignore-case=#f` |\n| `word` | a whole word appears in subtitles | `value` (required), `ignore-case=#t` |\n| `1` / `0` | **every** / **no** moment is active (keep-all / cut-all) | aliases `none` / `all`; a base for manual ranges |\n\n```bash\nauto-editor video.mp4 --edit audio:threshold=0.04\nauto-editor video.mp4 --edit audio:-19dB            # dB form\nauto-editor video.mp4 --edit motion:threshold=0.02\nauto-editor video.mp4 --edit blackdetect            # cut to remove black: --edit \"(not blackdetect:0.98)\"\n```\n\nCombine streams/methods with boolean operators `or`, `and`, `xor`, `not`. Inside\nan operator, give the method an explicit arg in call form (`audio:0.04`, not bare\n`audio`) — a bare method there errors with `Bad kind`:\n\n```bash\nauto-editor multi.mov --edit \"(or audio:stream=0 audio:threshold=10%,stream=1)\"\nauto-editor video.mp4 --edit \"(or audio:0.03 motion:0.06)\"   # threshold is always positional arg 1\nauto-editor video.mp4 --edit \"(not audio:0.04)\"              # invert: keep the quiet parts\n```\n\n### Labels — more than just silent vs. loud (`--edit:N`, `--when:N`)\n\nEvery moment is tagged with an integer **label** (0–255), and each label has an\naction. Two labels are built in:\n\n| Label | Meaning | Set the membership with | Set the action with (default) |\n|---|---|---|---|\n| `0` | silent / inactive | (whatever `--edit` does *not* match) | `--when-inactive` = `-w:0` = `--when:0` (`cut`) |\n| `1` | normal / active | `--edit EXPR` (i.e. `--edit:1 EXPR`) | `--when-active` = `-w:1` = `--when:1` (`nil`) |\n\nSo plain `--edit audio` is shorthand for `--edit:1 audio`: matched moments become\nlabel 1, the rest stay 0. `-w:0`/`-w:1` are just `--when:0`/`--when:1`.\n\nAdd **custom classes** with `--edit:N EXPR` (N = 2–255) and give each its own\naction with `--when:N ACTION` (default `nil` = keep). Where classes overlap, the\n**higher label wins**:\n\n```bash\n# Cut silence (0) and keep speech (1) as usual, but also zoom wherever there's motion (2)\nauto-editor video.mp4 --edit:2 motion:0.02 --when:2 zoom:2\nauto-editor video.mp4 -e:2 motion:0.1 -w:2 speed:2        # -e/-w short forms\n\n# Three tiers: cut silence, keep quiet speech at 1x, speed up the loud parts\nauto-editor talk.mp4 --edit audio:-30dB --edit:2 audio:-12dB --when:2 speed:1.5\n```\n\n`--edit:0` is rejected — label 0 is the implicit silent class; use `--when:0` to\nact on silent moments. (The `--edit 1` / `--edit 0` *values* above are unrelated:\nthey set label 1's expression to the all-true / all-false constant.)\n\n## 2. Set the pace — `--margin` and `--smooth`\n\n```bash\nauto-editor video.mp4 --margin 0.2sec        # default: pad each kept section by 0.2s both sides\nauto-editor video.mp4 --margin 0.3s,1.5sec   # 0.3s before, 1.5s after (avoids clipped words)\nauto-editor video.mp4 --smooth 0.2s,0.1s     # min-cut 0.2s, min-clip 0.1s (default); --smooth 0 = off\n```\n\n## 3. Manual edits — range syntax\n\n`--cut`, `--keep`, `--set-speed`, `--set-action` take `START,STOP` ranges.\nStart is inclusive, stop exclusive. Default unit is the **timebase**; add `sec`\n(`s`/`second`) for seconds. Vars `start`/`end`; negatives count from the end.\nRanges combine with automatic edits, or use `--edit 0`/`--edit 1` for\nmanual-only editing.\n\n```bash\nauto-editor video.mp4 --cut 0,30 -10sec,end    # drop first 30 frames and last 10s\nauto-editor video.mp4 --keep 0,30sec           # force-keep first 30s regardless of loudness\nauto-editor video.mp4 --set-speed 2,0,30       # SPEED,START,STOP: 2x over frames 0–29\nauto-editor video.mp4 --edit 1 --cut 0,5sec    # no auto cuts, just drop first 5s\nauto-editor video.mp4 --edit 0 --keep 0,5sec   # keep only the first 5s\n```\n\n## 4. Reverse the edit — see what gets cut\n\n```bash\nauto-editor video.mp4 --when-active cut --when-inactive nil   # keep the silence, cut the loud parts\n```\n\n## 5. Render & file size\n\n```bash\nauto-editor video.mp4 -c:v hevc -b:v 0       # variable bitrate\nauto-editor video.mp4 -b:v 230k              # target a bitrate to shrink the file\nauto-editor video.mp4 -crf 23 -preset medium # quality-based encoding\nauto-editor video.mp4 --scale 0.5            # halve the resolution\nauto-editor video.mp4 -anorm ebu             # EBU R128 loudness normalize (or peak:-3)\n```\n\nLarger-than-expected files are usually a too-high auto bitrate — set `-b:v` or `-crf`. `auto-editor cache` lists/`cache clear`s the analysis cache.\n\n## Going further\n\n- Creative effects (speed/zoom/overlays/animations) → **auto-editor-effects** skill\n- Export to Premiere/Resolve/Final Cut, clip-sequence, or `.v1/.v2/.v3` timelines → **auto-editor-export** skill\n- Transcribe audio and cut by spoken words → **auto-editor-transcribe** skill\n- Full option list: `auto-editor --help` or <https://auto-editor.com/ref/options.md>\n","skills/auto-editor-transcribe/SKILL.md":"---\nname: auto-editor-transcribe\ndescription: Transcribe a media file or live microphone to text or subtitles with auto-editor's whisper subcommand, then edit by spoken content — cut to keep (or drop) sections whose subtitles match a word or regex. Use when someone wants a transcript, captions, live speech transcription, or to cut a video based on what is said rather than on loudness.\n---\n\n# Transcribe & edit by speech\n\nUse auto-editor's whisper.cpp (Whisper or NVIDIA Parakeet models) or Apple Speech backend to transcribe audio. Cut a timeline based on subtitle content with `--edit subtitle`/`word`.\n\n## Transcribe — `auto-editor whisper`\n\n```\nauto-editor whisper <file|:mic> <model> [options]\n```\n\nSet `<model>` to a `ggml` model path. Three backends, chosen by the model:\n\n- **Whisper**: `ggml-small.en.bin`, `ggml-medium.en.bin`, `ggml-large-v3.bin`, …\n  (https://huggingface.co/ggerganov/whisper.cpp). 99+ languages, `--translate`,\n  `--prompt`.\n- **Parakeet**: any model with \"parakeet\" in the filename, e.g.\n  `ggml-parakeet-tdt-0.6b-v3-q8_0.bin` (https://huggingface.co/ggml-org/parakeet-GGUF).\n  Faster than Whisper at comparable English accuracy; language is\n  auto-detected. `--translate`, `--prompt`, and `--language` are rejected.\n- **Apple**: the magic model name `apple` uses Apple's built-in transcriber;\n  requires macOS 26 or later.\n\nOnly the first audio stream of a file is used. Audio is resampled to 16 kHz, and\ntext prints to stdout by default.\n\n```bash\nauto-editor whisper example.mp4 ggml-medium.en.bin                      # plain text → stdout\nauto-editor whisper example.mp4 ggml-medium.en.bin --format srt -o out.srt\nauto-editor whisper example.mp4 ggml-parakeet-tdt-0.6b-v3-q8_0.bin      # parakeet backend\nauto-editor whisper example.mp4 apple --language en_US                  # macOS 26+\n```\n\nOptions: `--format text|srt|json`, `-o/--output FILE`, `-l/--language en`\n(default auto), `-tr/--translate` (→ English), `-sw/--split-words` (one word per\ncue), `--queue SECS` (default 30), `--prompt TEXT`, `--threads N` (default 4),\nand `-t/--threshold THRES` (default 0.04).\n\n`--split-words` works with on all backends. Parakeet is the most accurate.\n\nWith the `apple` model, set `--language` to a supported language or locale.\nApple speech cannot auto-detect language, so `auto` falls back to `en_US` with a\nwarning. Do not pass `--translate` or `--prompt`; neither is supported. The first\nuse of a language may download Apple's speech model and therefore needs network\naccess.\n\n### Transcribe a live microphone\n\nPass `:mic` instead of a file. Stop capture gracefully with Ctrl-C.\n\n```bash\nauto-editor whisper :mic ggml-medium.en.bin\nauto-editor whisper :mic apple --language en_US    # macOS 26+\nauto-editor whisper :mic ggml-medium.en.bin -o transcript.srt\n```\n\nThis streams the microphone directly to transcription and does not save a\nmedia recording. To retain and edit the captured audio, use `auto-editor :mic`;\neditor and timeline exports save a sibling lossless-FLAC `_RECORDING.mka` by\ndefault.\n\nLive capture supports macOS, Windows, and Linux:\n\n- macOS uses AVFoundation and prefers a USB microphone, then the system default.\n- Windows uses DirectShow and prefers a USB microphone, then the first audio capture device.\n- Linux uses the default ALSA input device.\n\nWhen `-o/--output` ends in `.srt`, `.json`, `.txt`, or `.text`, the output format is\ninferred unless `--format` is set explicitly.\n\n## Edit by spoken content\n\n`--edit subtitle`/`word` marks the time a matching subtitle line occupies as\n**active** (kept by default). Use an existing subtitle stream, or transcribe to\nan `.srt` first and feed it in.\n\n| Method | Active when… | Args (defaults) |\n|---|---|---|\n| `subtitle` / `regex` | `pattern` (regex) matches a line | `pattern=\"\"` (empty matches every line), `stream=0`, `ignore-case=#f` |\n| `word` | `value` appears as a whole word | `value` required, `stream=0`, `ignore-case=#t` |\n\n`pattern` is optional for `subtitle`/`regex`: with none, the empty regex matches\nevery subtitle line, so `--edit subtitle` keeps all sections that have a subtitle\n(i.e. cut everything with no speech). `word`, by contrast, requires a `value`.\n\n```bash\n# Keep only sections that have any subtitle (cut the silent gaps between speech)\nauto-editor talk.mkv --edit subtitle\n\n# Keep only sections where \"introduction\" is spoken\nauto-editor lecture.mp4 --edit word:introduction\n\n# Regex match (case-insensitive); keep matched lines\nauto-editor talk.mkv --edit \"subtitle:pattern=(yes|no),ignore-case=#t\"\n\n# Cut filler words instead of keeping them: invert with `not`\nauto-editor video.mp4 --edit \"(not word:um)\"\n```\n\n### Transcribe → cut workflow\n\nWhen the media has no subtitle stream, generate a **sidecar** named after the\ninput — for `talk.mp4`, auto-editor auto-loads `talk.srt` (then `talk.ass`) when\nthe requested subtitle stream isn't embedded:\n\n```bash\nauto-editor whisper talk.mp4 ggml-medium.en.bin --format srt -o talk.srt\nauto-editor talk.mp4 --edit word:question        # picks up talk.srt automatically\n```\n\nInspect subtitle streams with `auto-editor subdump FILE` (text subtitles only;\nbitmap subtitles won't dump).\n\nFor loudness/motion-based cutting and pace, see the **auto-editor** skill.\n","skills/auto-editor-effects/SKILL.md":"---\nname: auto-editor-effects\ndescription: Apply actions and animations to sections of a video/audio with auto-editor — change speed, duck or fade volume, de-ess, zoom/Ken Burns, rotate/spin, draw boxes, overlay logos or picture-in-picture, and animate any of these with ramps and easing. Use when someone wants creative effects or per-section behavior rather than plain silence-cutting.\n---\n\n# Actions & animations\n\nInstead of just cutting, give each section an **action** with `--when-active`\n(`-w:1`, loud) and `--when-inactive` (`-w:0`, silent). Defaults: `-w:1 nil`\n(keep), `-w:0 cut`. Chain actions with commas; they apply in order.\n\n```bash\nauto-editor video.mp4 -w:0 speed:8            # fast-forward through silence (pitch preserved)\nauto-editor video.mp4 -w:0 speed:3,volume:0.5 # speed up AND halve volume of silent parts\n```\n\n`-w:0`/`-w:1` are the silent (label 0) and active (label 1) classes. You can\ndefine more classes with `--edit:N`/`-e:N` and act on them with `--when:N`/`-w:N`\n(N = 2–255) — see the **auto-editor** skill's \"Labels\" section. Every action\nbelow works as the value of any `-w:N`.\n\n## Actions\n\n| Action | What it does | Form / range |\n|---|---|---|\n| `nil` | keep unchanged | — |\n| `cut` | remove section | — |\n| `speed` | time-stretch, **pitch preserved** | `speed:8`, `speed:0.5` |\n| `varispeed` | speed via pitch shift (tape/vinyl) | `varispeed:2` (0.2–100) |\n| `pitch` | shift pitch only, **duration preserved** | `pitch:12` (octave up), `pitch:-7` (−24–24 semitones) |\n| `volume` | scale volume (1=normal, 0.5=−6dB) | `volume:0.2` |\n| `deesser` | reduce sibilance | `deesser:intensity[:max[:freq]]` (each 0–1) |\n| `tone` | wave from a MIDI note (`add:` generator) | `add:tone:69`, `add:tone:36:saw` |\n| `invert` | invert pixels | — |\n| `zoom` | zoom factor (1=none) | `zoom:2`, `zoom:0.5` (>0–100) |\n| `rotate` | fixed clockwise rotation, expands so nothing clips | `rotate:90` (pair with `--resolution`) |\n| `spin` | continuous spin `deg/rate` (deg per sec) | `spin:0/120`, `spin:90/-45` |\n| `drawbox` | filled rectangle | `drawbox:x:y:w:h:color` |\n| `pos` | place an overlay clip `x:y[:scale]` | mainly used inside `add` / v3 |\n| `add` | overlay a layer: every stream the file holds | `add:path[:x:y:scale]` |\n\n```bash\nauto-editor video.mp4 -w:1 deesser:0.8:0.7:0.4\nauto-editor video.mp4 -w:1 rotate:90 --resolution 1080,1920   # landscape → portrait\nauto-editor video.mp4 -w:1 drawbox:0:0:1920:200:#000000       # redact a strip\n```\n\n### Overlays — `add`\n\n`add` is **virtual**: it adds an overlay layer rather than a per-frame effect.\nStill images hold for the whole section; PNG alpha is preserved. Omit placement\nto scale-to-fit and center. Actions chained **after** an `add` apply to that new\noverlay, not the base. `add` brings **every stream** the file holds: a video with\nsound gets a video layer plus its audio layers (mixed in, not a second stream),\nan audio-only file adds sound with no picture, an image adds picture with no\nsound. In place of a file it takes a **generator** action: `confetti`/`drawbox`\npaint a video layer, `tone` synthesizes an audio one (so `add:tone` layers stack\ninto a chord).\n\n```bash\nauto-editor video.mp4 -w:1 add:./logo.png             # centered, fit to canvas\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25  # PiP in the corner, audio included\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25,volume:0.3  # ...tucked under the base\nauto-editor video.mp4 -w:1 add:./music.mp3,volume:0.4 # background music, no picture added\nauto-editor video.mp4 -w:1 add:./logo.png,spin:0/-30  # the logo spins, not the base video\nauto-editor song.mp3 -bg white -w:1 add:./cover.png   # audio + image → video\nauto-editor video.mp4 -w:1 add:tone:69                # 440 Hz tone over the audio\nauto-editor video.mp4 -w:0 nil,add:tone:81            # beep the silence, don't cut it\nauto-editor video.mp4 -w:1 add:tone:60,volume:1..0:ease=out  # a plucked, decaying note\nauto-editor video.mp4 -w:1 add:tone:36:saw            # buzzy bass (sine|saw|square|triangle)\n```\n\nOverlays appear only where their section is kept, so for silent sections use\n`-w:0 nil,add:...` (keep + overlay). With `--set-action` the range is kept\nautomatically.\n\n## Animations — ramps `from..to`\n\n`zoom`, `opacity`, `blur`, `brightness`, `volume`, and each `pos` and `pixelate`\nfield accept a ramp. The value interpolates across the section, reaching `to` on\nits last frame. More than two points = keyframes, spread evenly.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5          # Ken Burns\nauto-editor video.mp4 -w:1 opacity:0..1         # fade in\nauto-editor video.mp4 -w:1 volume:0..1          # audio fade in\nauto-editor video.mp4 -w:1 zoom:1..1.5..1       # zoom in then out (keyframes)\nauto-editor video.mp4 -w:1 pixelate:1..64       # dissolve into coarser blocks\nauto-editor video.mp4 -w:1 add:./logo.png,pos:0..1200:40:1..0.5  # slide + shrink overlay\n```\n\nEasing — `:ease=curve[:duration]`, curve ∈ `linear|in|out|inout`. A standalone\n`ease:` token sets the curve for every animated action after it. `rotate`/`spin`\nare **not** affected by easing.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5:ease=inout\nauto-editor video.mp4 -w:1 opacity:0..1:ease=in:2sec        # ease over 2s, then hold\nauto-editor video.mp4 -w:1 ease:out,zoom:1..1.3,brightness:0..0.3\n```\n\nTimed keyframes — `value@time` puts a keyframe at a time from the section's\nstart: a bare frame count, `sec`, or `%` of the section. The value holds before\nthe first and after the last; an untimed keyframe among timed ones sits evenly\nbetween its neighbors. An ease curve then eases each step between keyframes\n(no ease duration with timed keyframes).\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1@0..2@1.5sec..1@100%      # in by 1.5s, out by the end\nauto-editor video.mp4 -w:1 volume:0@0..0@2sec..1@4sec      # silent 2s, then fade in\nauto-editor video.mp4 -w:1 opacity:1@80%..0:ease=in        # fade out over the last 20%\n```\n\n## Target a time range — `--set-action`\n\n`--set-action ACTION,START,END` overrides defaults for a range (range syntax;\n`sec`, `start`/`end`, negatives all work). The range is force-kept.\n\n```bash\nauto-editor video.mp4 --set-action nil,0,5sec\nauto-editor video.mp4 --set-action speed:1.5,varispeed:1.5,30sec,end\nauto-editor video.mp4 --set-action add:./logo.png:600:300:1.0,1sec,2sec\n```\n\n## Recipes\n\n```bash\nauto-editor :mic -w:1 deesser:0.8:0.7:0.4         # record, then clean up speech\nauto-editor podcast.mp3 -w:0 cut -w:1 speed:1.15      # cut silence, tighten speech\nauto-editor video.mp4 -w:0 volume:0.3                 # duck (not cut) the silence\nauto-editor video.mp4 -w:1 varispeed:1.25             # nightcore (speed + pitch up)\nauto-editor video.mp4 -w:0 pitch:12                   # chipmunk the silence, same length\nauto-editor video.mp4 -w:0 speed:6,volume:0.4         # fast, quiet silent sections\n```\n\nWith `:mic`, press Ctrl-C to finish capture; actions are applied afterward.\n\nFull reference: <https://auto-editor.com/ref/actions.md>. For plain cutting / pace /\nedit methods, see the **auto-editor** skill.\n"},"files":{"skills/auto-editor-export/SKILL.md":"---\nname: auto-editor-export\ndescription: Export auto-editor's edit or microphone recording to a video editor (Premiere, DaVinci Resolve, Final Cut Pro, ShotCut, Kdenlive), to individual clips, or to auto-editor timeline files (.v1/.v2/.v3); and import timeline/XML files to render them. Use when someone wants an editor-ready project, a preserved microphone source, split clips, or timeline files instead of a finished video.\n---\n\n# Exporting & importing\n\nBy default auto-editor renders a media file. `--export` (`-ex`) changes the\ntarget. The output extension is chosen automatically per mode.\n\n```bash\nauto-editor video.mp4 --export premiere    # → video_ALTERED.xml for Premiere Pro\n```\n\n## Export targets\n\n| `--export` | For | Output |\n|---|---|---|\n| `premiere` | Adobe Premiere Pro (fcp7 xml) | `.xml` |\n| `resolve` | DaVinci Resolve (fcpxml) | `.fcpxml` |\n| `resolve-fcp7` | Resolve via legacy fcp7 xml | `.xml` |\n| `final-cut-pro` | Final Cut Pro | `.fcpxml` |\n| `shotcut` | ShotCut | `.mlt` |\n| `kdenlive` | Kdenlive | `.kdenlive` |\n| `clip-sequence` | individual media clips, one per kept segment | media files |\n| `v1` / `v2` / `v3` | auto-editor timeline files | `.v1` / `.v2` / `.v3` |\n| (default) | rendered media file | per container |\n\n```bash\nauto-editor video.mp4 --export resolve\nauto-editor video.mp4 --export final-cut-pro\nauto-editor video.mp4 --export clip-sequence\nauto-editor video.mp4 --export v3 -o timeline.v3\n```\n\n## Export a microphone recording\n\nUse `:mic` as the input and press Ctrl-C to finish capture. Editor and timeline\nexports keep a sibling `*_RECORDING.mka` source so the project remains usable:\n\n```bash\nauto-editor :mic --export resolve -o interview.fcpxml\n# writes interview.fcpxml and interview_RECORDING.mka\n```\n\nWith `-c:a auto` (the default), persistent recordings use lossless FLAC.\nChoose another Matroska-supported encoder explicitly; unsupported encoders fail\nbefore capture. Encoder sample rates and channel layouts are negotiated during\nthe recording transcode.\n\n```bash\nauto-editor :mic --export resolve -c:a opus -o interview.fcpxml\nauto-editor :mic --sample-rate 44.1kHz --export v3 -o interview.v3\n```\n\nOrdinary rendered outputs and `clip-sequence` use a temporary capture instead;\ntheir final audio codec still follows the output container and `-c:a`.\n\n## Naming the timeline\n\n`premiere`, `resolve`, and `final-cut-pro` accept a `name` attr (default\n\"Auto-Editor Media Group\"). Pass extra attrs after a colon:\n\n```bash\n# POSIX shells\nauto-editor example.mp4 --export 'premiere:name=\"Your name here\"'\n# PowerShell (double the inner quotes)\nauto-editor example.mp4 --export 'premiere:name=\"\"Your name here\"\"'\n```\n\n`final-cut-pro` and `resolve` also accept `version`, the FCPXML version to write: `11`\n(default) for FCPXML 1.11, or `10` for FCPXML 1.10, for an older editor that can't\nread 1.11.\n\n```bash\nauto-editor example.mp4 --export final-cut-pro:version=10\n```\n\n## Split into clips without further editing\n\nTo split at the cut points but make no other edits, set both actions to `nil`:\n\n```bash\nauto-editor example.mp4 -w:0 nil -w:1 nil --export premiere\n```\n\n## Importing timelines\n\nauto-editor reads timeline/XML files as inputs and renders them like any media:\n\n```bash\nauto-editor myFcp7File.xml -o render.mp4    # render an fcp7 xml (experimental)\nauto-editor timeline.v3 -o render.mp4       # render an auto-editor timeline file\n```\n\nImporters: auto-editor timeline files (`.v1`, `.v2`, `.v3`) and FCP7 XML\n(experimental). The input format is detected by extension. PRs for more importers\nare welcome.\n\n## Timeline format notes\n\n`.v1`/`.v2`/`.v3` are auto-editor's own timeline formats; `.v3` is the current\nlayered format (supports stacked tracks / overlay compositing). See\n<https://auto-editor.com/docs/v3> (and `/docs/v1`, `/docs/v2`). Export a timeline\nto inspect or hand-tweak the edit, then re-import it to render.\n\nFor plain rendering, edit methods, and pace, see the **auto-editor** skill.\n","skills/auto-editor/SKILL.md":"---\nname: auto-editor\ndescription: Record a microphone or edit video/audio with the auto-editor CLI — cut out dead space (silence, motionlessness, black frames), set the pace, make manual cuts, and render the result. Use when someone wants to capture and trim a microphone, remove silence, shorten a recording, speed through quiet parts, or otherwise edit media with auto-editor.\n---\n\n# Editing with auto-editor\n\nauto-editor analyzes a media file, marks every timebase section as **active**\n(e.g. loud) or **inactive** (e.g. silent), then applies an action to each. The\ndefaults: keep active sections unchanged, **cut** inactive ones.\n\n```bash\nauto-editor path/to/video.mp4          # writes video_ALTERED.mp4\nauto-editor video.mp4 -o out.mp4       # choose the output name\n```\n\nRun the installed `auto-editor`, or `./auto-editor` from this repo. `auto-editor\ninfo FILE` shows streams/codecs/duration; `--preview` prints what *would* be cut\nand exits without rendering — use it to sanity-check before a long render.\n\n## Record and edit a microphone\n\nUse `:mic` as the input on macOS, Windows, or Linux. Stop capture gracefully\nwith Ctrl-C; auto-editor then analyzes and edits the recording normally.\n\n```bash\nauto-editor :mic                                      # → mic_ALTERED.wav\nauto-editor :mic --sample-rate 44.1kHz -o trimmed.m4a\nauto-editor :mic --edit audio:threshold=6%\n```\n\nAll normal edit, action, and rendering options apply. Editor and timeline\nexports preserve the source capture separately; use the **auto-editor-export**\nskill for recording-codec and naming details.\n\n## 1. Choose what counts as \"active\" — `--edit METHOD`\n\n`audio:threshold=0.04,stream=all` is the default. Threshold takes a 0–1 fraction\nor a `dB` value (case-sensitive).\n\n| Method | Marks active when… | Key args (defaults) |\n|---|---|---|\n| `audio` | loudest sample ≥ threshold | `threshold=0.04`, `stream=all` |\n| `motion` | frame-to-frame change ≥ threshold | `threshold=0.02`, `stream=0`, `width=400`, `blur=9` |\n| `blackdetect` | frame is mostly black | `threshold=0.98`, `pixel-black=0.10` (wrap in `not` to cut black) |\n| `subtitle`/`regex` | a subtitle line matches `pattern` | `pattern` (required), `ignore-case=#f` |\n| `word` | a whole word appears in subtitles | `value` (required), `ignore-case=#t` |\n| `1` / `0` | **every** / **no** moment is active (keep-all / cut-all) | aliases `none` / `all`; a base for manual ranges |\n\n```bash\nauto-editor video.mp4 --edit audio:threshold=0.04\nauto-editor video.mp4 --edit audio:-19dB            # dB form\nauto-editor video.mp4 --edit motion:threshold=0.02\nauto-editor video.mp4 --edit blackdetect            # cut to remove black: --edit \"(not blackdetect:0.98)\"\n```\n\nCombine streams/methods with boolean operators `or`, `and`, `xor`, `not`. Inside\nan operator, give the method an explicit arg in call form (`audio:0.04`, not bare\n`audio`) — a bare method there errors with `Bad kind`:\n\n```bash\nauto-editor multi.mov --edit \"(or audio:stream=0 audio:threshold=10%,stream=1)\"\nauto-editor video.mp4 --edit \"(or audio:0.03 motion:0.06)\"   # threshold is always positional arg 1\nauto-editor video.mp4 --edit \"(not audio:0.04)\"              # invert: keep the quiet parts\n```\n\n### Labels — more than just silent vs. loud (`--edit:N`, `--when:N`)\n\nEvery moment is tagged with an integer **label** (0–255), and each label has an\naction. Two labels are built in:\n\n| Label | Meaning | Set the membership with | Set the action with (default) |\n|---|---|---|---|\n| `0` | silent / inactive | (whatever `--edit` does *not* match) | `--when-inactive` = `-w:0` = `--when:0` (`cut`) |\n| `1` | normal / active | `--edit EXPR` (i.e. `--edit:1 EXPR`) | `--when-active` = `-w:1` = `--when:1` (`nil`) |\n\nSo plain `--edit audio` is shorthand for `--edit:1 audio`: matched moments become\nlabel 1, the rest stay 0. `-w:0`/`-w:1` are just `--when:0`/`--when:1`.\n\nAdd **custom classes** with `--edit:N EXPR` (N = 2–255) and give each its own\naction with `--when:N ACTION` (default `nil` = keep). Where classes overlap, the\n**higher label wins**:\n\n```bash\n# Cut silence (0) and keep speech (1) as usual, but also zoom wherever there's motion (2)\nauto-editor video.mp4 --edit:2 motion:0.02 --when:2 zoom:2\nauto-editor video.mp4 -e:2 motion:0.1 -w:2 speed:2        # -e/-w short forms\n\n# Three tiers: cut silence, keep quiet speech at 1x, speed up the loud parts\nauto-editor talk.mp4 --edit audio:-30dB --edit:2 audio:-12dB --when:2 speed:1.5\n```\n\n`--edit:0` is rejected — label 0 is the implicit silent class; use `--when:0` to\nact on silent moments. (The `--edit 1` / `--edit 0` *values* above are unrelated:\nthey set label 1's expression to the all-true / all-false constant.)\n\n## 2. Set the pace — `--margin` and `--smooth`\n\n```bash\nauto-editor video.mp4 --margin 0.2sec        # default: pad each kept section by 0.2s both sides\nauto-editor video.mp4 --margin 0.3s,1.5sec   # 0.3s before, 1.5s after (avoids clipped words)\nauto-editor video.mp4 --smooth 0.2s,0.1s     # min-cut 0.2s, min-clip 0.1s (default); --smooth 0 = off\n```\n\n## 3. Manual edits — range syntax\n\n`--cut`, `--keep`, `--set-speed`, `--set-action` take `START,STOP` ranges.\nStart is inclusive, stop exclusive. Default unit is the **timebase**; add `sec`\n(`s`/`second`) for seconds. Vars `start`/`end`; negatives count from the end.\nRanges combine with automatic edits, or use `--edit 0`/`--edit 1` for\nmanual-only editing.\n\n```bash\nauto-editor video.mp4 --cut 0,30 -10sec,end    # drop first 30 frames and last 10s\nauto-editor video.mp4 --keep 0,30sec           # force-keep first 30s regardless of loudness\nauto-editor video.mp4 --set-speed 2,0,30       # SPEED,START,STOP: 2x over frames 0–29\nauto-editor video.mp4 --edit 1 --cut 0,5sec    # no auto cuts, just drop first 5s\nauto-editor video.mp4 --edit 0 --keep 0,5sec   # keep only the first 5s\n```\n\n## 4. Reverse the edit — see what gets cut\n\n```bash\nauto-editor video.mp4 --when-active cut --when-inactive nil   # keep the silence, cut the loud parts\n```\n\n## 5. Render & file size\n\n```bash\nauto-editor video.mp4 -c:v hevc -b:v 0       # variable bitrate\nauto-editor video.mp4 -b:v 230k              # target a bitrate to shrink the file\nauto-editor video.mp4 -crf 23 -preset medium # quality-based encoding\nauto-editor video.mp4 --scale 0.5            # halve the resolution\nauto-editor video.mp4 -anorm ebu             # EBU R128 loudness normalize (or peak:-3)\n```\n\nLarger-than-expected files are usually a too-high auto bitrate — set `-b:v` or `-crf`. `auto-editor cache` lists/`cache clear`s the analysis cache.\n\n## Going further\n\n- Creative effects (speed/zoom/overlays/animations) → **auto-editor-effects** skill\n- Export to Premiere/Resolve/Final Cut, clip-sequence, or `.v1/.v2/.v3` timelines → **auto-editor-export** skill\n- Transcribe audio and cut by spoken words → **auto-editor-transcribe** skill\n- Full option list: `auto-editor --help` or <https://auto-editor.com/ref/options.md>\n","skills/auto-editor-transcribe/SKILL.md":"---\nname: auto-editor-transcribe\ndescription: Transcribe a media file or live microphone to text or subtitles with auto-editor's whisper subcommand, then edit by spoken content — cut to keep (or drop) sections whose subtitles match a word or regex. Use when someone wants a transcript, captions, live speech transcription, or to cut a video based on what is said rather than on loudness.\n---\n\n# Transcribe & edit by speech\n\nUse auto-editor's whisper.cpp (Whisper or NVIDIA Parakeet models) or Apple Speech backend to transcribe audio. Cut a timeline based on subtitle content with `--edit subtitle`/`word`.\n\n## Transcribe — `auto-editor whisper`\n\n```\nauto-editor whisper <file|:mic> <model> [options]\n```\n\nSet `<model>` to a `ggml` model path. Three backends, chosen by the model:\n\n- **Whisper**: `ggml-small.en.bin`, `ggml-medium.en.bin`, `ggml-large-v3.bin`, …\n  (https://huggingface.co/ggerganov/whisper.cpp). 99+ languages, `--translate`,\n  `--prompt`.\n- **Parakeet**: any model with \"parakeet\" in the filename, e.g.\n  `ggml-parakeet-tdt-0.6b-v3-q8_0.bin` (https://huggingface.co/ggml-org/parakeet-GGUF).\n  Faster than Whisper at comparable English accuracy; language is\n  auto-detected. `--translate`, `--prompt`, and `--language` are rejected.\n- **Apple**: the magic model name `apple` uses Apple's built-in transcriber;\n  requires macOS 26 or later.\n\nOnly the first audio stream of a file is used. Audio is resampled to 16 kHz, and\ntext prints to stdout by default.\n\n```bash\nauto-editor whisper example.mp4 ggml-medium.en.bin                      # plain text → stdout\nauto-editor whisper example.mp4 ggml-medium.en.bin --format srt -o out.srt\nauto-editor whisper example.mp4 ggml-parakeet-tdt-0.6b-v3-q8_0.bin      # parakeet backend\nauto-editor whisper example.mp4 apple --language en_US                  # macOS 26+\n```\n\nOptions: `--format text|srt|json`, `-o/--output FILE`, `-l/--language en`\n(default auto), `-tr/--translate` (→ English), `-sw/--split-words` (one word per\ncue), `--queue SECS` (default 30), `--prompt TEXT`, `--threads N` (default 4),\nand `-t/--threshold THRES` (default 0.04).\n\n`--split-words` works with on all backends. Parakeet is the most accurate.\n\nWith the `apple` model, set `--language` to a supported language or locale.\nApple speech cannot auto-detect language, so `auto` falls back to `en_US` with a\nwarning. Do not pass `--translate` or `--prompt`; neither is supported. The first\nuse of a language may download Apple's speech model and therefore needs network\naccess.\n\n### Transcribe a live microphone\n\nPass `:mic` instead of a file. Stop capture gracefully with Ctrl-C.\n\n```bash\nauto-editor whisper :mic ggml-medium.en.bin\nauto-editor whisper :mic apple --language en_US    # macOS 26+\nauto-editor whisper :mic ggml-medium.en.bin -o transcript.srt\n```\n\nThis streams the microphone directly to transcription and does not save a\nmedia recording. To retain and edit the captured audio, use `auto-editor :mic`;\neditor and timeline exports save a sibling lossless-FLAC `_RECORDING.mka` by\ndefault.\n\nLive capture supports macOS, Windows, and Linux:\n\n- macOS uses AVFoundation and prefers a USB microphone, then the system default.\n- Windows uses DirectShow and prefers a USB microphone, then the first audio capture device.\n- Linux uses the default ALSA input device.\n\nWhen `-o/--output` ends in `.srt`, `.json`, `.txt`, or `.text`, the output format is\ninferred unless `--format` is set explicitly.\n\n## Edit by spoken content\n\n`--edit subtitle`/`word` marks the time a matching subtitle line occupies as\n**active** (kept by default). Use an existing subtitle stream, or transcribe to\nan `.srt` first and feed it in.\n\n| Method | Active when… | Args (defaults) |\n|---|---|---|\n| `subtitle` / `regex` | `pattern` (regex) matches a line | `pattern=\"\"` (empty matches every line), `stream=0`, `ignore-case=#f` |\n| `word` | `value` appears as a whole word | `value` required, `stream=0`, `ignore-case=#t` |\n\n`pattern` is optional for `subtitle`/`regex`: with none, the empty regex matches\nevery subtitle line, so `--edit subtitle` keeps all sections that have a subtitle\n(i.e. cut everything with no speech). `word`, by contrast, requires a `value`.\n\n```bash\n# Keep only sections that have any subtitle (cut the silent gaps between speech)\nauto-editor talk.mkv --edit subtitle\n\n# Keep only sections where \"introduction\" is spoken\nauto-editor lecture.mp4 --edit word:introduction\n\n# Regex match (case-insensitive); keep matched lines\nauto-editor talk.mkv --edit \"subtitle:pattern=(yes|no),ignore-case=#t\"\n\n# Cut filler words instead of keeping them: invert with `not`\nauto-editor video.mp4 --edit \"(not word:um)\"\n```\n\n### Transcribe → cut workflow\n\nWhen the media has no subtitle stream, generate a **sidecar** named after the\ninput — for `talk.mp4`, auto-editor auto-loads `talk.srt` (then `talk.ass`) when\nthe requested subtitle stream isn't embedded:\n\n```bash\nauto-editor whisper talk.mp4 ggml-medium.en.bin --format srt -o talk.srt\nauto-editor talk.mp4 --edit word:question        # picks up talk.srt automatically\n```\n\nInspect subtitle streams with `auto-editor subdump FILE` (text subtitles only;\nbitmap subtitles won't dump).\n\nFor loudness/motion-based cutting and pace, see the **auto-editor** skill.\n","skills/auto-editor-effects/SKILL.md":"---\nname: auto-editor-effects\ndescription: Apply actions and animations to sections of a video/audio with auto-editor — change speed, duck or fade volume, de-ess, zoom/Ken Burns, rotate/spin, draw boxes, overlay logos or picture-in-picture, and animate any of these with ramps and easing. Use when someone wants creative effects or per-section behavior rather than plain silence-cutting.\n---\n\n# Actions & animations\n\nInstead of just cutting, give each section an **action** with `--when-active`\n(`-w:1`, loud) and `--when-inactive` (`-w:0`, silent). Defaults: `-w:1 nil`\n(keep), `-w:0 cut`. Chain actions with commas; they apply in order.\n\n```bash\nauto-editor video.mp4 -w:0 speed:8            # fast-forward through silence (pitch preserved)\nauto-editor video.mp4 -w:0 speed:3,volume:0.5 # speed up AND halve volume of silent parts\n```\n\n`-w:0`/`-w:1` are the silent (label 0) and active (label 1) classes. You can\ndefine more classes with `--edit:N`/`-e:N` and act on them with `--when:N`/`-w:N`\n(N = 2–255) — see the **auto-editor** skill's \"Labels\" section. Every action\nbelow works as the value of any `-w:N`.\n\n## Actions\n\n| Action | What it does | Form / range |\n|---|---|---|\n| `nil` | keep unchanged | — |\n| `cut` | remove section | — |\n| `speed` | time-stretch, **pitch preserved** | `speed:8`, `speed:0.5` |\n| `varispeed` | speed via pitch shift (tape/vinyl) | `varispeed:2` (0.2–100) |\n| `pitch` | shift pitch only, **duration preserved** | `pitch:12` (octave up), `pitch:-7` (−24–24 semitones) |\n| `volume` | scale volume (1=normal, 0.5=−6dB) | `volume:0.2` |\n| `deesser` | reduce sibilance | `deesser:intensity[:max[:freq]]` (each 0–1) |\n| `tone` | wave from a MIDI note (`add:` generator) | `add:tone:69`, `add:tone:36:saw` |\n| `invert` | invert pixels | — |\n| `zoom` | zoom factor (1=none) | `zoom:2`, `zoom:0.5` (>0–100) |\n| `rotate` | fixed clockwise rotation, expands so nothing clips | `rotate:90` (pair with `--resolution`) |\n| `spin` | continuous spin `deg/rate` (deg per sec) | `spin:0/120`, `spin:90/-45` |\n| `drawbox` | filled rectangle | `drawbox:x:y:w:h:color` |\n| `pos` | place an overlay clip `x:y[:scale]` | mainly used inside `add` / v3 |\n| `add` | overlay a layer: every stream the file holds | `add:path[:x:y:scale]` |\n\n```bash\nauto-editor video.mp4 -w:1 deesser:0.8:0.7:0.4\nauto-editor video.mp4 -w:1 rotate:90 --resolution 1080,1920   # landscape → portrait\nauto-editor video.mp4 -w:1 drawbox:0:0:1920:200:#000000       # redact a strip\n```\n\n### Overlays — `add`\n\n`add` is **virtual**: it adds an overlay layer rather than a per-frame effect.\nStill images hold for the whole section; PNG alpha is preserved. Omit placement\nto scale-to-fit and center. Actions chained **after** an `add` apply to that new\noverlay, not the base. `add` brings **every stream** the file holds: a video with\nsound gets a video layer plus its audio layers (mixed in, not a second stream),\nan audio-only file adds sound with no picture, an image adds picture with no\nsound. In place of a file it takes a **generator** action: `confetti`/`drawbox`\npaint a video layer, `tone` synthesizes an audio one (so `add:tone` layers stack\ninto a chord).\n\n```bash\nauto-editor video.mp4 -w:1 add:./logo.png             # centered, fit to canvas\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25  # PiP in the corner, audio included\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25,volume:0.3  # ...tucked under the base\nauto-editor video.mp4 -w:1 add:./music.mp3,volume:0.4 # background music, no picture added\nauto-editor video.mp4 -w:1 add:./logo.png,spin:0/-30  # the logo spins, not the base video\nauto-editor song.mp3 -bg white -w:1 add:./cover.png   # audio + image → video\nauto-editor video.mp4 -w:1 add:tone:69                # 440 Hz tone over the audio\nauto-editor video.mp4 -w:0 nil,add:tone:81            # beep the silence, don't cut it\nauto-editor video.mp4 -w:1 add:tone:60,volume:1..0:ease=out  # a plucked, decaying note\nauto-editor video.mp4 -w:1 add:tone:36:saw            # buzzy bass (sine|saw|square|triangle)\n```\n\nOverlays appear only where their section is kept, so for silent sections use\n`-w:0 nil,add:...` (keep + overlay). With `--set-action` the range is kept\nautomatically.\n\n## Animations — ramps `from..to`\n\n`zoom`, `opacity`, `blur`, `brightness`, `volume`, and each `pos` and `pixelate`\nfield accept a ramp. The value interpolates across the section, reaching `to` on\nits last frame. More than two points = keyframes, spread evenly.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5          # Ken Burns\nauto-editor video.mp4 -w:1 opacity:0..1         # fade in\nauto-editor video.mp4 -w:1 volume:0..1          # audio fade in\nauto-editor video.mp4 -w:1 zoom:1..1.5..1       # zoom in then out (keyframes)\nauto-editor video.mp4 -w:1 pixelate:1..64       # dissolve into coarser blocks\nauto-editor video.mp4 -w:1 add:./logo.png,pos:0..1200:40:1..0.5  # slide + shrink overlay\n```\n\nEasing — `:ease=curve[:duration]`, curve ∈ `linear|in|out|inout`. A standalone\n`ease:` token sets the curve for every animated action after it. `rotate`/`spin`\nare **not** affected by easing.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5:ease=inout\nauto-editor video.mp4 -w:1 opacity:0..1:ease=in:2sec        # ease over 2s, then hold\nauto-editor video.mp4 -w:1 ease:out,zoom:1..1.3,brightness:0..0.3\n```\n\nTimed keyframes — `value@time` puts a keyframe at a time from the section's\nstart: a bare frame count, `sec`, or `%` of the section. The value holds before\nthe first and after the last; an untimed keyframe among timed ones sits evenly\nbetween its neighbors. An ease curve then eases each step between keyframes\n(no ease duration with timed keyframes).\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1@0..2@1.5sec..1@100%      # in by 1.5s, out by the end\nauto-editor video.mp4 -w:1 volume:0@0..0@2sec..1@4sec      # silent 2s, then fade in\nauto-editor video.mp4 -w:1 opacity:1@80%..0:ease=in        # fade out over the last 20%\n```\n\n## Target a time range — `--set-action`\n\n`--set-action ACTION,START,END` overrides defaults for a range (range syntax;\n`sec`, `start`/`end`, negatives all work). The range is force-kept.\n\n```bash\nauto-editor video.mp4 --set-action nil,0,5sec\nauto-editor video.mp4 --set-action speed:1.5,varispeed:1.5,30sec,end\nauto-editor video.mp4 --set-action add:./logo.png:600:300:1.0,1sec,2sec\n```\n\n## Recipes\n\n```bash\nauto-editor :mic -w:1 deesser:0.8:0.7:0.4         # record, then clean up speech\nauto-editor podcast.mp3 -w:0 cut -w:1 speed:1.15      # cut silence, tighten speech\nauto-editor video.mp4 -w:0 volume:0.3                 # duck (not cut) the silence\nauto-editor video.mp4 -w:1 varispeed:1.25             # nightcore (speed + pitch up)\nauto-editor video.mp4 -w:0 pitch:12                   # chipmunk the silence, same length\nauto-editor video.mp4 -w:0 speed:6,volume:0.4         # fast, quiet silent sections\n```\n\nWith `:mic`, press Ctrl-C to finish capture; actions are applied afterward.\n\nFull reference: <https://auto-editor.com/ref/actions.md>. For plain cutting / pace /\nedit methods, see the **auto-editor** skill.\n"},"items":[{"name":"SKILL.md","path":"skills/auto-editor-effects/SKILL.md","rawUrl":"https://raw.githubusercontent.com/WyattBlue/auto-editor/HEAD/skills/auto-editor-effects/SKILL.md","title":"auto-editor-effects","category":"anthropic-skill","format":"markdown","content":"---\nname: auto-editor-effects\ndescription: Apply actions and animations to sections of a video/audio with auto-editor — change speed, duck or fade volume, de-ess, zoom/Ken Burns, rotate/spin, draw boxes, overlay logos or picture-in-picture, and animate any of these with ramps and easing. Use when someone wants creative effects or per-section behavior rather than plain silence-cutting.\n---\n\n# Actions & animations\n\nInstead of just cutting, give each section an **action** with `--when-active`\n(`-w:1`, loud) and `--when-inactive` (`-w:0`, silent). Defaults: `-w:1 nil`\n(keep), `-w:0 cut`. Chain actions with commas; they apply in order.\n\n```bash\nauto-editor video.mp4 -w:0 speed:8            # fast-forward through silence (pitch preserved)\nauto-editor video.mp4 -w:0 speed:3,volume:0.5 # speed up AND halve volume of silent parts\n```\n\n`-w:0`/`-w:1` are the silent (label 0) and active (label 1) classes. You can\ndefine more classes with `--edit:N`/`-e:N` and act on them with `--when:N`/`-w:N`\n(N = 2–255) — see the **auto-editor** skill's \"Labels\" section. Every action\nbelow works as the value of any `-w:N`.\n\n## Actions\n\n| Action | What it does | Form / range |\n|---|---|---|\n| `nil` | keep unchanged | — |\n| `cut` | remove section | — |\n| `speed` | time-stretch, **pitch preserved** | `speed:8`, `speed:0.5` |\n| `varispeed` | speed via pitch shift (tape/vinyl) | `varispeed:2` (0.2–100) |\n| `pitch` | shift pitch only, **duration preserved** | `pitch:12` (octave up), `pitch:-7` (−24–24 semitones) |\n| `volume` | scale volume (1=normal, 0.5=−6dB) | `volume:0.2` |\n| `deesser` | reduce sibilance | `deesser:intensity[:max[:freq]]` (each 0–1) |\n| `tone` | wave from a MIDI note (`add:` generator) | `add:tone:69`, `add:tone:36:saw` |\n| `invert` | invert pixels | — |\n| `zoom` | zoom factor (1=none) | `zoom:2`, `zoom:0.5` (>0–100) |\n| `rotate` | fixed clockwise rotation, expands so nothing clips | `rotate:90` (pair with `--resolution`) |\n| `spin` | continuous spin `deg/rate` (deg per sec) | `spin:0/120`, `spin:90/-45` |\n| `drawbox` | filled rectangle | `drawbox:x:y:w:h:color` |\n| `pos` | place an overlay clip `x:y[:scale]` | mainly used inside `add` / v3 |\n| `add` | overlay a layer: every stream the file holds | `add:path[:x:y:scale]` |\n\n```bash\nauto-editor video.mp4 -w:1 deesser:0.8:0.7:0.4\nauto-editor video.mp4 -w:1 rotate:90 --resolution 1080,1920   # landscape → portrait\nauto-editor video.mp4 -w:1 drawbox:0:0:1920:200:#000000       # redact a strip\n```\n\n### Overlays — `add`\n\n`add` is **virtual**: it adds an overlay layer rather than a per-frame effect.\nStill images hold for the whole section; PNG alpha is preserved. Omit placement\nto scale-to-fit and center. Actions chained **after** an `add` apply to that new\noverlay, not the base. `add` brings **every stream** the file holds: a video with\nsound gets a video layer plus its audio layers (mixed in, not a second stream),\nan audio-only file adds sound with no picture, an image adds picture with no\nsound. In place of a file it takes a **generator** action: `confetti`/`drawbox`\npaint a video layer, `tone` synthesizes an audio one (so `add:tone` layers stack\ninto a chord).\n\n```bash\nauto-editor video.mp4 -w:1 add:./logo.png             # centered, fit to canvas\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25  # PiP in the corner, audio included\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25,volume:0.3  # ...tucked under the base\nauto-editor video.mp4 -w:1 add:./music.mp3,volume:0.4 # background music, no picture added\nauto-editor video.mp4 -w:1 add:./logo.png,spin:0/-30  # the logo spins, not the base video\nauto-editor song.mp3 -bg white -w:1 add:./cover.png   # audio + image → video\nauto-editor video.mp4 -w:1 add:tone:69                # 440 Hz tone over the audio\nauto-editor video.mp4 -w:0 nil,add:tone:81            # beep the silence, don't cut it\nauto-editor video.mp4 -w:1 add:tone:60,volume:1..0:ease=out  # a plucked, decaying note\nauto-editor video.mp4 -w:1 add:tone:36:saw            # buzzy bass (sine|saw|square|triangle)\n```\n\nOverlays appear only where their section is kept, so for silent sections use\n`-w:0 nil,add:...` (keep + overlay). With `--set-action` the range is kept\nautomatically.\n\n## Animations — ramps `from..to`\n\n`zoom`, `opacity`, `blur`, `brightness`, `volume`, and each `pos` and `pixelate`\nfield accept a ramp. The value interpolates across the section, reaching `to` on\nits last frame. More than two points = keyframes, spread evenly.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5          # Ken Burns\nauto-editor video.mp4 -w:1 opacity:0..1         # fade in\nauto-editor video.mp4 -w:1 volume:0..1          # audio fade in\nauto-editor video.mp4 -w:1 zoom:1..1.5..1       # zoom in then out (keyframes)\nauto-editor video.mp4 -w:1 pixelate:1..64       # dissolve into coarser blocks\nauto-editor video.mp4 -w:1 add:./logo.png,pos:0..1200:40:1..0.5  # slide + shrink overlay\n```\n\nEasing — `:ease=curve[:duration]`, curve ∈ `linear|in|out|inout`. A standalone\n`ease:` token sets the curve for every animated action after it. `rotate`/`spin`\nare **not** affected by easing.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5:ease=inout\nauto-editor video.mp4 -w:1 opacity:0..1:ease=in:2sec        # ease over 2s, then hold\nauto-editor video.mp4 -w:1 ease:out,zoom:1..1.3,brightness:0..0.3\n```\n\nTimed keyframes — `value@time` puts a keyframe at a time from the section's\nstart: a bare frame count, `sec`, or `%` of the section. The value holds before\nthe first and after the last; an untimed keyframe among timed ones sits evenly\nbetween its neighbors. An ease curve then eases each step between keyframes\n(no ease duration with timed keyframes).\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1@0..2@1.5sec..1@100%      # in by 1.5s, out by the end\nauto-editor video.mp4 -w:1 volume:0@0..0@2sec..1@4sec      # silent 2s, then fade in\nauto-editor video.mp4 -w:1 opacity:1@80%..0:ease=in        # fade out over the last 20%\n```\n\n## Target a time range — `--set-action`\n\n`--set-action ACTION,START,END` overrides defaults for a range (range syntax;\n`sec`, `start`/`end`, negatives all work). The range is force-kept.\n\n```bash\nauto-editor video.mp4 --set-action nil,0,5sec\nauto-editor video.mp4 --set-action speed:1.5,varispeed:1.5,30sec,end\nauto-editor video.mp4 --set-action add:./logo.png:600:300:1.0,1sec,2sec\n```\n\n## Recipes\n\n```bash\nauto-editor :mic -w:1 deesser:0.8:0.7:0.4         # record, then clean up speech\nauto-editor podcast.mp3 -w:0 cut -w:1 speed:1.15      # cut silence, tighten speech\nauto-editor video.mp4 -w:0 volume:0.3                 # duck (not cut) the silence\nauto-editor video.mp4 -w:1 varispeed:1.25             # nightcore (speed + pitch up)\nauto-editor video.mp4 -w:0 pitch:12                   # chipmunk the silence, same length\nauto-editor video.mp4 -w:0 speed:6,volume:0.4         # fast, quiet silent sections\n```\n\nWith `:mic`, press Ctrl-C to finish capture; actions are applied afterward.\n\nFull reference: <https://auto-editor.com/ref/actions.md>. For plain cutting / pace /\nedit methods, see the **auto-editor** skill.\n","frontmatter":{"name":"auto-editor-effects","description":"Apply actions and animations to sections of a video/audio with auto-editor — change speed, duck or fade volume, de-ess, zoom/Ken Burns, rotate/spin, draw boxes, overlay logos or picture-in-picture, and animate any of these with ramps and easing. Use when someone wants creative effects or per-section behavior rather than plain silence-cutting."},"isInternal":false,"tokens":2215,"sizeBytes":7115},{"name":"SKILL.md","path":"skills/auto-editor-export/SKILL.md","rawUrl":"https://raw.githubusercontent.com/WyattBlue/auto-editor/HEAD/skills/auto-editor-export/SKILL.md","title":"auto-editor-export","category":"anthropic-skill","format":"markdown","content":"---\nname: auto-editor-export\ndescription: Export auto-editor's edit or microphone recording to a video editor (Premiere, DaVinci Resolve, Final Cut Pro, ShotCut, Kdenlive), to individual clips, or to auto-editor timeline files (.v1/.v2/.v3); and import timeline/XML files to render them. Use when someone wants an editor-ready project, a preserved microphone source, split clips, or timeline files instead of a finished video.\n---\n\n# Exporting & importing\n\nBy default auto-editor renders a media file. `--export` (`-ex`) changes the\ntarget. The output extension is chosen automatically per mode.\n\n```bash\nauto-editor video.mp4 --export premiere    # → video_ALTERED.xml for Premiere Pro\n```\n\n## Export targets\n\n| `--export` | For | Output |\n|---|---|---|\n| `premiere` | Adobe Premiere Pro (fcp7 xml) | `.xml` |\n| `resolve` | DaVinci Resolve (fcpxml) | `.fcpxml` |\n| `resolve-fcp7` | Resolve via legacy fcp7 xml | `.xml` |\n| `final-cut-pro` | Final Cut Pro | `.fcpxml` |\n| `shotcut` | ShotCut | `.mlt` |\n| `kdenlive` | Kdenlive | `.kdenlive` |\n| `clip-sequence` | individual media clips, one per kept segment | media files |\n| `v1` / `v2` / `v3` | auto-editor timeline files | `.v1` / `.v2` / `.v3` |\n| (default) | rendered media file | per container |\n\n```bash\nauto-editor video.mp4 --export resolve\nauto-editor video.mp4 --export final-cut-pro\nauto-editor video.mp4 --export clip-sequence\nauto-editor video.mp4 --export v3 -o timeline.v3\n```\n\n## Export a microphone recording\n\nUse `:mic` as the input and press Ctrl-C to finish capture. Editor and timeline\nexports keep a sibling `*_RECORDING.mka` source so the project remains usable:\n\n```bash\nauto-editor :mic --export resolve -o interview.fcpxml\n# writes interview.fcpxml and interview_RECORDING.mka\n```\n\nWith `-c:a auto` (the default), persistent recordings use lossless FLAC.\nChoose another Matroska-supported encoder explicitly; unsupported encoders fail\nbefore capture. Encoder sample rates and channel layouts are negotiated during\nthe recording transcode.\n\n```bash\nauto-editor :mic --export resolve -c:a opus -o interview.fcpxml\nauto-editor :mic --sample-rate 44.1kHz --export v3 -o interview.v3\n```\n\nOrdinary rendered outputs and `clip-sequence` use a temporary capture instead;\ntheir final audio codec still follows the output container and `-c:a`.\n\n## Naming the timeline\n\n`premiere`, `resolve`, and `final-cut-pro` accept a `name` attr (default\n\"Auto-Editor Media Group\"). Pass extra attrs after a colon:\n\n```bash\n# POSIX shells\nauto-editor example.mp4 --export 'premiere:name=\"Your name here\"'\n# PowerShell (double the inner quotes)\nauto-editor example.mp4 --export 'premiere:name=\"\"Your name here\"\"'\n```\n\n`final-cut-pro` and `resolve` also accept `version`, the FCPXML version to write: `11`\n(default) for FCPXML 1.11, or `10` for FCPXML 1.10, for an older editor that can't\nread 1.11.\n\n```bash\nauto-editor example.mp4 --export final-cut-pro:version=10\n```\n\n## Split into clips without further editing\n\nTo split at the cut points but make no other edits, set both actions to `nil`:\n\n```bash\nauto-editor example.mp4 -w:0 nil -w:1 nil --export premiere\n```\n\n## Importing timelines\n\nauto-editor reads timeline/XML files as inputs and renders them like any media:\n\n```bash\nauto-editor myFcp7File.xml -o render.mp4    # render an fcp7 xml (experimental)\nauto-editor timeline.v3 -o render.mp4       # render an auto-editor timeline file\n```\n\nImporters: auto-editor timeline files (`.v1`, `.v2`, `.v3`) and FCP7 XML\n(experimental). The input format is detected by extension. PRs for more importers\nare welcome.\n\n## Timeline format notes\n\n`.v1`/`.v2`/`.v3` are auto-editor's own timeline formats; `.v3` is the current\nlayered format (supports stacked tracks / overlay compositing). See\n<https://auto-editor.com/docs/v3> (and `/docs/v1`, `/docs/v2`). Export a timeline\nto inspect or hand-tweak the edit, then re-import it to render.\n\nFor plain rendering, edit methods, and pace, see the **auto-editor** skill.\n","frontmatter":{"name":"auto-editor-export","description":"Export auto-editor's edit or microphone recording to a video editor (Premiere, DaVinci Resolve, Final Cut Pro, ShotCut, Kdenlive), to individual clips, or to auto-editor timeline files (.v1/.v2/.v3); and import timeline/XML files to render them. Use when someone wants an editor-ready project, a preserved microphone source, split clips, or timeline files instead of a finished video."},"isInternal":false,"tokens":1064,"sizeBytes":3969},{"name":"SKILL.md","path":"skills/auto-editor-transcribe/SKILL.md","rawUrl":"https://raw.githubusercontent.com/WyattBlue/auto-editor/HEAD/skills/auto-editor-transcribe/SKILL.md","title":"auto-editor-transcribe","category":"anthropic-skill","format":"markdown","content":"---\nname: auto-editor-transcribe\ndescription: Transcribe a media file or live microphone to text or subtitles with auto-editor's whisper subcommand, then edit by spoken content — cut to keep (or drop) sections whose subtitles match a word or regex. Use when someone wants a transcript, captions, live speech transcription, or to cut a video based on what is said rather than on loudness.\n---\n\n# Transcribe & edit by speech\n\nUse auto-editor's whisper.cpp (Whisper or NVIDIA Parakeet models) or Apple Speech backend to transcribe audio. Cut a timeline based on subtitle content with `--edit subtitle`/`word`.\n\n## Transcribe — `auto-editor whisper`\n\n```\nauto-editor whisper <file|:mic> <model> [options]\n```\n\nSet `<model>` to a `ggml` model path. Three backends, chosen by the model:\n\n- **Whisper**: `ggml-small.en.bin`, `ggml-medium.en.bin`, `ggml-large-v3.bin`, …\n  (https://huggingface.co/ggerganov/whisper.cpp). 99+ languages, `--translate`,\n  `--prompt`.\n- **Parakeet**: any model with \"parakeet\" in the filename, e.g.\n  `ggml-parakeet-tdt-0.6b-v3-q8_0.bin` (https://huggingface.co/ggml-org/parakeet-GGUF).\n  Faster than Whisper at comparable English accuracy; language is\n  auto-detected. `--translate`, `--prompt`, and `--language` are rejected.\n- **Apple**: the magic model name `apple` uses Apple's built-in transcriber;\n  requires macOS 26 or later.\n\nOnly the first audio stream of a file is used. Audio is resampled to 16 kHz, and\ntext prints to stdout by default.\n\n```bash\nauto-editor whisper example.mp4 ggml-medium.en.bin                      # plain text → stdout\nauto-editor whisper example.mp4 ggml-medium.en.bin --format srt -o out.srt\nauto-editor whisper example.mp4 ggml-parakeet-tdt-0.6b-v3-q8_0.bin      # parakeet backend\nauto-editor whisper example.mp4 apple --language en_US                  # macOS 26+\n```\n\nOptions: `--format text|srt|json`, `-o/--output FILE`, `-l/--language en`\n(default auto), `-tr/--translate` (→ English), `-sw/--split-words` (one word per\ncue), `--queue SECS` (default 30), `--prompt TEXT`, `--threads N` (default 4),\nand `-t/--threshold THRES` (default 0.04).\n\n`--split-words` works with on all backends. Parakeet is the most accurate.\n\nWith the `apple` model, set `--language` to a supported language or locale.\nApple speech cannot auto-detect language, so `auto` falls back to `en_US` with a\nwarning. Do not pass `--translate` or `--prompt`; neither is supported. The first\nuse of a language may download Apple's speech model and therefore needs network\naccess.\n\n### Transcribe a live microphone\n\nPass `:mic` instead of a file. Stop capture gracefully with Ctrl-C.\n\n```bash\nauto-editor whisper :mic ggml-medium.en.bin\nauto-editor whisper :mic apple --language en_US    # macOS 26+\nauto-editor whisper :mic ggml-medium.en.bin -o transcript.srt\n```\n\nThis streams the microphone directly to transcription and does not save a\nmedia recording. To retain and edit the captured audio, use `auto-editor :mic`;\neditor and timeline exports save a sibling lossless-FLAC `_RECORDING.mka` by\ndefault.\n\nLive capture supports macOS, Windows, and Linux:\n\n- macOS uses AVFoundation and prefers a USB microphone, then the system default.\n- Windows uses DirectShow and prefers a USB microphone, then the first audio capture device.\n- Linux uses the default ALSA input device.\n\nWhen `-o/--output` ends in `.srt`, `.json`, `.txt`, or `.text`, the output format is\ninferred unless `--format` is set explicitly.\n\n## Edit by spoken content\n\n`--edit subtitle`/`word` marks the time a matching subtitle line occupies as\n**active** (kept by default). Use an existing subtitle stream, or transcribe to\nan `.srt` first and feed it in.\n\n| Method | Active when… | Args (defaults) |\n|---|---|---|\n| `subtitle` / `regex` | `pattern` (regex) matches a line | `pattern=\"\"` (empty matches every line), `stream=0`, `ignore-case=#f` |\n| `word` | `value` appears as a whole word | `value` required, `stream=0`, `ignore-case=#t` |\n\n`pattern` is optional for `subtitle`/`regex`: with none, the empty regex matches\nevery subtitle line, so `--edit subtitle` keeps all sections that have a subtitle\n(i.e. cut everything with no speech). `word`, by contrast, requires a `value`.\n\n```bash\n# Keep only sections that have any subtitle (cut the silent gaps between speech)\nauto-editor talk.mkv --edit subtitle\n\n# Keep only sections where \"introduction\" is spoken\nauto-editor lecture.mp4 --edit word:introduction\n\n# Regex match (case-insensitive); keep matched lines\nauto-editor talk.mkv --edit \"subtitle:pattern=(yes|no),ignore-case=#t\"\n\n# Cut filler words instead of keeping them: invert with `not`\nauto-editor video.mp4 --edit \"(not word:um)\"\n```\n\n### Transcribe → cut workflow\n\nWhen the media has no subtitle stream, generate a **sidecar** named after the\ninput — for `talk.mp4`, auto-editor auto-loads `talk.srt` (then `talk.ass`) when\nthe requested subtitle stream isn't embedded:\n\n```bash\nauto-editor whisper talk.mp4 ggml-medium.en.bin --format srt -o talk.srt\nauto-editor talk.mp4 --edit word:question        # picks up talk.srt automatically\n```\n\nInspect subtitle streams with `auto-editor subdump FILE` (text subtitles only;\nbitmap subtitles won't dump).\n\nFor loudness/motion-based cutting and pace, see the **auto-editor** skill.\n","frontmatter":{"name":"auto-editor-transcribe","description":"Transcribe a media file or live microphone to text or subtitles with auto-editor's whisper subcommand, then edit by spoken content — cut to keep (or drop) sections whose subtitles match a word or regex. Use when someone wants a transcript, captions, live speech transcription, or to cut a video based on what is said rather than on loudness."},"isInternal":false,"tokens":1361,"sizeBytes":5258},{"name":"SKILL.md","path":"skills/auto-editor/SKILL.md","rawUrl":"https://raw.githubusercontent.com/WyattBlue/auto-editor/HEAD/skills/auto-editor/SKILL.md","title":"auto-editor","category":"anthropic-skill","format":"markdown","content":"---\nname: auto-editor\ndescription: Record a microphone or edit video/audio with the auto-editor CLI — cut out dead space (silence, motionlessness, black frames), set the pace, make manual cuts, and render the result. Use when someone wants to capture and trim a microphone, remove silence, shorten a recording, speed through quiet parts, or otherwise edit media with auto-editor.\n---\n\n# Editing with auto-editor\n\nauto-editor analyzes a media file, marks every timebase section as **active**\n(e.g. loud) or **inactive** (e.g. silent), then applies an action to each. The\ndefaults: keep active sections unchanged, **cut** inactive ones.\n\n```bash\nauto-editor path/to/video.mp4          # writes video_ALTERED.mp4\nauto-editor video.mp4 -o out.mp4       # choose the output name\n```\n\nRun the installed `auto-editor`, or `./auto-editor` from this repo. `auto-editor\ninfo FILE` shows streams/codecs/duration; `--preview` prints what *would* be cut\nand exits without rendering — use it to sanity-check before a long render.\n\n## Record and edit a microphone\n\nUse `:mic` as the input on macOS, Windows, or Linux. Stop capture gracefully\nwith Ctrl-C; auto-editor then analyzes and edits the recording normally.\n\n```bash\nauto-editor :mic                                      # → mic_ALTERED.wav\nauto-editor :mic --sample-rate 44.1kHz -o trimmed.m4a\nauto-editor :mic --edit audio:threshold=6%\n```\n\nAll normal edit, action, and rendering options apply. Editor and timeline\nexports preserve the source capture separately; use the **auto-editor-export**\nskill for recording-codec and naming details.\n\n## 1. Choose what counts as \"active\" — `--edit METHOD`\n\n`audio:threshold=0.04,stream=all` is the default. Threshold takes a 0–1 fraction\nor a `dB` value (case-sensitive).\n\n| Method | Marks active when… | Key args (defaults) |\n|---|---|---|\n| `audio` | loudest sample ≥ threshold | `threshold=0.04`, `stream=all` |\n| `motion` | frame-to-frame change ≥ threshold | `threshold=0.02`, `stream=0`, `width=400`, `blur=9` |\n| `blackdetect` | frame is mostly black | `threshold=0.98`, `pixel-black=0.10` (wrap in `not` to cut black) |\n| `subtitle`/`regex` | a subtitle line matches `pattern` | `pattern` (required), `ignore-case=#f` |\n| `word` | a whole word appears in subtitles | `value` (required), `ignore-case=#t` |\n| `1` / `0` | **every** / **no** moment is active (keep-all / cut-all) | aliases `none` / `all`; a base for manual ranges |\n\n```bash\nauto-editor video.mp4 --edit audio:threshold=0.04\nauto-editor video.mp4 --edit audio:-19dB            # dB form\nauto-editor video.mp4 --edit motion:threshold=0.02\nauto-editor video.mp4 --edit blackdetect            # cut to remove black: --edit \"(not blackdetect:0.98)\"\n```\n\nCombine streams/methods with boolean operators `or`, `and`, `xor`, `not`. Inside\nan operator, give the method an explicit arg in call form (`audio:0.04`, not bare\n`audio`) — a bare method there errors with `Bad kind`:\n\n```bash\nauto-editor multi.mov --edit \"(or audio:stream=0 audio:threshold=10%,stream=1)\"\nauto-editor video.mp4 --edit \"(or audio:0.03 motion:0.06)\"   # threshold is always positional arg 1\nauto-editor video.mp4 --edit \"(not audio:0.04)\"              # invert: keep the quiet parts\n```\n\n### Labels — more than just silent vs. loud (`--edit:N`, `--when:N`)\n\nEvery moment is tagged with an integer **label** (0–255), and each label has an\naction. Two labels are built in:\n\n| Label | Meaning | Set the membership with | Set the action with (default) |\n|---|---|---|---|\n| `0` | silent / inactive | (whatever `--edit` does *not* match) | `--when-inactive` = `-w:0` = `--when:0` (`cut`) |\n| `1` | normal / active | `--edit EXPR` (i.e. `--edit:1 EXPR`) | `--when-active` = `-w:1` = `--when:1` (`nil`) |\n\nSo plain `--edit audio` is shorthand for `--edit:1 audio`: matched moments become\nlabel 1, the rest stay 0. `-w:0`/`-w:1` are just `--when:0`/`--when:1`.\n\nAdd **custom classes** with `--edit:N EXPR` (N = 2–255) and give each its own\naction with `--when:N ACTION` (default `nil` = keep). Where classes overlap, the\n**higher label wins**:\n\n```bash\n# Cut silence (0) and keep speech (1) as usual, but also zoom wherever there's motion (2)\nauto-editor video.mp4 --edit:2 motion:0.02 --when:2 zoom:2\nauto-editor video.mp4 -e:2 motion:0.1 -w:2 speed:2        # -e/-w short forms\n\n# Three tiers: cut silence, keep quiet speech at 1x, speed up the loud parts\nauto-editor talk.mp4 --edit audio:-30dB --edit:2 audio:-12dB --when:2 speed:1.5\n```\n\n`--edit:0` is rejected — label 0 is the implicit silent class; use `--when:0` to\nact on silent moments. (The `--edit 1` / `--edit 0` *values* above are unrelated:\nthey set label 1's expression to the all-true / all-false constant.)\n\n## 2. Set the pace — `--margin` and `--smooth`\n\n```bash\nauto-editor video.mp4 --margin 0.2sec        # default: pad each kept section by 0.2s both sides\nauto-editor video.mp4 --margin 0.3s,1.5sec   # 0.3s before, 1.5s after (avoids clipped words)\nauto-editor video.mp4 --smooth 0.2s,0.1s     # min-cut 0.2s, min-clip 0.1s (default); --smooth 0 = off\n```\n\n## 3. Manual edits — range syntax\n\n`--cut`, `--keep`, `--set-speed`, `--set-action` take `START,STOP` ranges.\nStart is inclusive, stop exclusive. Default unit is the **timebase**; add `sec`\n(`s`/`second`) for seconds. Vars `start`/`end`; negatives count from the end.\nRanges combine with automatic edits, or use `--edit 0`/`--edit 1` for\nmanual-only editing.\n\n```bash\nauto-editor video.mp4 --cut 0,30 -10sec,end    # drop first 30 frames and last 10s\nauto-editor video.mp4 --keep 0,30sec           # force-keep first 30s regardless of loudness\nauto-editor video.mp4 --set-speed 2,0,30       # SPEED,START,STOP: 2x over frames 0–29\nauto-editor video.mp4 --edit 1 --cut 0,5sec    # no auto cuts, just drop first 5s\nauto-editor video.mp4 --edit 0 --keep 0,5sec   # keep only the first 5s\n```\n\n## 4. Reverse the edit — see what gets cut\n\n```bash\nauto-editor video.mp4 --when-active cut --when-inactive nil   # keep the silence, cut the loud parts\n```\n\n## 5. Render & file size\n\n```bash\nauto-editor video.mp4 -c:v hevc -b:v 0       # variable bitrate\nauto-editor video.mp4 -b:v 230k              # target a bitrate to shrink the file\nauto-editor video.mp4 -crf 23 -preset medium # quality-based encoding\nauto-editor video.mp4 --scale 0.5            # halve the resolution\nauto-editor video.mp4 -anorm ebu             # EBU R128 loudness normalize (or peak:-3)\n```\n\nLarger-than-expected files are usually a too-high auto bitrate — set `-b:v` or `-crf`. `auto-editor cache` lists/`cache clear`s the analysis cache.\n\n## Going further\n\n- Creative effects (speed/zoom/overlays/animations) → **auto-editor-effects** skill\n- Export to Premiere/Resolve/Final Cut, clip-sequence, or `.v1/.v2/.v3` timelines → **auto-editor-export** skill\n- Transcribe audio and cut by spoken words → **auto-editor-transcribe** skill\n- Full option list: `auto-editor --help` or <https://auto-editor.com/ref/options.md>\n","frontmatter":{"name":"auto-editor","description":"Record a microphone or edit video/audio with the auto-editor CLI — cut out dead space (silence, motionlessness, black frames), set the pace, make manual cuts, and render the result. Use when someone wants to capture and trim a microphone, remove silence, shorten a recording, speed through quiet parts, or otherwise edit media with auto-editor."},"isInternal":false,"tokens":2019,"sizeBytes":6974}],"systemPromptSnippet":"<yakaai_skills repo=\"WyattBlue/auto-editor\">\n<!-- File: skills/auto-editor-effects/SKILL.md (Tokens: ~2215 | Category: anthropic-skill) -->\n---\nname: auto-editor-effects\ndescription: Apply actions and animations to sections of a video/audio with auto-editor — change speed, duck or fade volume, de-ess, zoom/Ken Burns, rotate/spin, draw boxes, overlay logos or picture-in-picture, and animate any of these with ramps and easing. Use when someone wants creative effects or per-section behavior rather than plain silence-cutting.\n---\n\n# Actions & animations\n\nInstead of just cutting, give each section an **action** with `--when-active`\n(`-w:1`, loud) and `--when-inactive` (`-w:0`, silent). Defaults: `-w:1 nil`\n(keep), `-w:0 cut`. Chain actions with commas; they apply in order.\n\n```bash\nauto-editor video.mp4 -w:0 speed:8            # fast-forward through silence (pitch preserved)\nauto-editor video.mp4 -w:0 speed:3,volume:0.5 # speed up AND halve volume of silent parts\n```\n\n`-w:0`/`-w:1` are the silent (label 0) and active (label 1) classes. You can\ndefine more classes with `--edit:N`/`-e:N` and act on them with `--when:N`/`-w:N`\n(N = 2–255) — see the **auto-editor** skill's \"Labels\" section. Every action\nbelow works as the value of any `-w:N`.\n\n## Actions\n\n| Action | What it does | Form / range |\n|---|---|---|\n| `nil` | keep unchanged | — |\n| `cut` | remove section | — |\n| `speed` | time-stretch, **pitch preserved** | `speed:8`, `speed:0.5` |\n| `varispeed` | speed via pitch shift (tape/vinyl) | `varispeed:2` (0.2–100) |\n| `pitch` | shift pitch only, **duration preserved** | `pitch:12` (octave up), `pitch:-7` (−24–24 semitones) |\n| `volume` | scale volume (1=normal, 0.5=−6dB) | `volume:0.2` |\n| `deesser` | reduce sibilance | `deesser:intensity[:max[:freq]]` (each 0–1) |\n| `tone` | wave from a MIDI note (`add:` generator) | `add:tone:69`, `add:tone:36:saw` |\n| `invert` | invert pixels | — |\n| `zoom` | zoom factor (1=none) | `zoom:2`, `zoom:0.5` (>0–100) |\n| `rotate` | fixed clockwise rotation, expands so nothing clips | `rotate:90` (pair with `--resolution`) |\n| `spin` | continuous spin `deg/rate` (deg per sec) | `spin:0/120`, `spin:90/-45` |\n| `drawbox` | filled rectangle | `drawbox:x:y:w:h:color` |\n| `pos` | place an overlay clip `x:y[:scale]` | mainly used inside `add` / v3 |\n| `add` | overlay a layer: every stream the file holds | `add:path[:x:y:scale]` |\n\n```bash\nauto-editor video.mp4 -w:1 deesser:0.8:0.7:0.4\nauto-editor video.mp4 -w:1 rotate:90 --resolution 1080,1920   # landscape → portrait\nauto-editor video.mp4 -w:1 drawbox:0:0:1920:200:#000000       # redact a strip\n```\n\n### Overlays — `add`\n\n`add` is **virtual**: it adds an overlay layer rather than a per-frame effect.\nStill images hold for the whole section; PNG alpha is preserved. Omit placement\nto scale-to-fit and center. Actions chained **after** an `add` apply to that new\noverlay, not the base. `add` brings **every stream** the file holds: a video with\nsound gets a video layer plus its audio layers (mixed in, not a second stream),\nan audio-only file adds sound with no picture, an image adds picture with no\nsound. In place of a file it takes a **generator** action: `confetti`/`drawbox`\npaint a video layer, `tone` synthesizes an audio one (so `add:tone` layers stack\ninto a chord).\n\n```bash\nauto-editor video.mp4 -w:1 add:./logo.png             # centered, fit to canvas\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25  # PiP in the corner, audio included\nauto-editor video.mp4 -w:1 add:./pip.mp4:900:60:0.25,volume:0.3  # ...tucked under the base\nauto-editor video.mp4 -w:1 add:./music.mp3,volume:0.4 # background music, no picture added\nauto-editor video.mp4 -w:1 add:./logo.png,spin:0/-30  # the logo spins, not the base video\nauto-editor song.mp3 -bg white -w:1 add:./cover.png   # audio + image → video\nauto-editor video.mp4 -w:1 add:tone:69                # 440 Hz tone over the audio\nauto-editor video.mp4 -w:0 nil,add:tone:81            # beep the silence, don't cut it\nauto-editor video.mp4 -w:1 add:tone:60,volume:1..0:ease=out  # a plucked, decaying note\nauto-editor video.mp4 -w:1 add:tone:36:saw            # buzzy bass (sine|saw|square|triangle)\n```\n\nOverlays appear only where their section is kept, so for silent sections use\n`-w:0 nil,add:...` (keep + overlay). With `--set-action` the range is kept\nautomatically.\n\n## Animations — ramps `from..to`\n\n`zoom`, `opacity`, `blur`, `brightness`, `volume`, and each `pos` and `pixelate`\nfield accept a ramp. The value interpolates across the section, reaching `to` on\nits last frame. More than two points = keyframes, spread evenly.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5          # Ken Burns\nauto-editor video.mp4 -w:1 opacity:0..1         # fade in\nauto-editor video.mp4 -w:1 volume:0..1          # audio fade in\nauto-editor video.mp4 -w:1 zoom:1..1.5..1       # zoom in then out (keyframes)\nauto-editor video.mp4 -w:1 pixelate:1..64       # dissolve into coarser blocks\nauto-editor video.mp4 -w:1 add:./logo.png,pos:0..1200:40:1..0.5  # slide + shrink overlay\n```\n\nEasing — `:ease=curve[:duration]`, curve ∈ `linear|in|out|inout`. A standalone\n`ease:` token sets the curve for every animated action after it. `rotate`/`spin`\nare **not** affected by easing.\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1..1.5:ease=inout\nauto-editor video.mp4 -w:1 opacity:0..1:ease=in:2sec        # ease over 2s, then hold\nauto-editor video.mp4 -w:1 ease:out,zoom:1..1.3,brightness:0..0.3\n```\n\nTimed keyframes — `value@time` puts a keyframe at a time from the section's\nstart: a bare frame count, `sec`, or `%` of the section. The value holds before\nthe first and after the last; an untimed keyframe among timed ones sits evenly\nbetween its neighbors. An ease curve then eases each step between keyframes\n(no ease duration with timed keyframes).\n\n```bash\nauto-editor video.mp4 -w:1 zoom:1@0..2@1.5sec..1@100%      # in by 1.5s, out by the end\nauto-editor video.mp4 -w:1 volume:0@0..0@2sec..1@4sec      # silent 2s, then fade in\nauto-editor video.mp4 -w:1 opacity:1@80%..0:ease=in        # fade out over the last 20%\n```\n\n## Target a time range — `--set-action`\n\n`--set-action ACTION,START,END` overrides defaults for a range (range syntax;\n`sec`, `start`/`end`, negatives all work). The range is force-kept.\n\n```bash\nauto-editor video.mp4 --set-action nil,0,5sec\nauto-editor video.mp4 --set-action speed:1.5,varispeed:1.5,30sec,end\nauto-editor video.mp4 --set-action add:./logo.png:600:300:1.0,1sec,2sec\n```\n\n## Recipes\n\n```bash\nauto-editor :mic -w:1 deesser:0.8:0.7:0.4         # record, then clean up speech\nauto-editor podcast.mp3 -w:0 cut -w:1 speed:1.15      # cut silence, tighten speech\nauto-editor video.mp4 -w:0 volume:0.3                 # duck (not cut) the silence\nauto-editor video.mp4 -w:1 varispeed:1.25             # nightcore (speed + pitch up)\nauto-editor video.mp4 -w:0 pitch:12                   # chipmunk the silence, same length\nauto-editor video.mp4 -w:0 speed:6,volume:0.4         # fast, quiet silent sections\n```\n\nWith `:mic`, press Ctrl-C to finish capture; actions are applied afterward.\n\nFull reference: <https://auto-editor.com/ref/actions.md>. For plain cutting / pace /\nedit methods, see the **auto-editor** skill.\n\n<!-- File: skills/auto-editor-export/SKILL.md (Tokens: ~1064 | Category: anthropic-skill) -->\n---\nname: auto-editor-export\ndescription: Export auto-editor's edit or microphone recording to a video editor (Premiere, DaVinci Resolve, Final Cut Pro, ShotCut, Kdenlive), to individual clips, or to auto-editor timeline files (.v1/.v2/.v3); and import timeline/XML files to render them. Use when someone wants an editor-ready project, a preserved microphone source, split clips, or timeline files instead of a finished video.\n---\n\n# Exporting & importing\n\nBy default auto-editor renders a media file. `--export` (`-ex`) changes the\ntarget. The output extension is chosen automatically per mode.\n\n```bash\nauto-editor video.mp4 --export premiere    # → video_ALTERED.xml for Premiere Pro\n```\n\n## Export targets\n\n| `--export` | For | Output |\n|---|---|---|\n| `premiere` | Adobe Premiere Pro (fcp7 xml) | `.xml` |\n| `resolve` | DaVinci Resolve (fcpxml) | `.fcpxml` |\n| `resolve-fcp7` | Resolve via legacy fcp7 xml | `.xml` |\n| `final-cut-pro` | Final Cut Pro | `.fcpxml` |\n| `shotcut` | ShotCut | `.mlt` |\n| `kdenlive` | Kdenlive | `.kdenlive` |\n| `clip-sequence` | individual media clips, one per kept segment | media files |\n| `v1` / `v2` / `v3` | auto-editor timeline files | `.v1` / `.v2` / `.v3` |\n| (default) | rendered media file | per container |\n\n```bash\nauto-editor video.mp4 --export resolve\nauto-editor video.mp4 --export final-cut-pro\nauto-editor video.mp4 --export clip-sequence\nauto-editor video.mp4 --export v3 -o timeline.v3\n```\n\n## Export a microphone recording\n\nUse `:mic` as the input and press Ctrl-C to finish capture. Editor and timeline\nexports keep a sibling `*_RECORDING.mka` source so the project remains usable:\n\n```bash\nauto-editor :mic --export resolve -o interview.fcpxml\n# writes interview.fcpxml and interview_RECORDING.mka\n```\n\nWith `-c:a auto` (the default), persistent recordings use lossless FLAC.\nChoose another Matroska-supported encoder explicitly; unsupported encoders fail\nbefore capture. Encoder sample rates and channel layouts are negotiated during\nthe recording transcode.\n\n```bash\nauto-editor :mic --export resolve -c:a opus -o interview.fcpxml\nauto-editor :mic --sample-rate 44.1kHz --export v3 -o interview.v3\n```\n\nOrdinary rendered outputs and `clip-sequence` use a temporary capture instead;\ntheir final audio codec still follows the output container and `-c:a`.\n\n## Naming the timeline\n\n`premiere`, `resolve`, and `final-cut-pro` accept a `name` attr (default\n\"Auto-Editor Media Group\"). Pass extra attrs after a colon:\n\n```bash\n# POSIX shells\nauto-editor example.mp4 --export 'premiere:name=\"Your name here\"'\n# PowerShell (double the inner quotes)\nauto-editor example.mp4 --export 'premiere:name=\"\"Your name here\"\"'\n```\n\n`final-cut-pro` and `resolve` also accept `version`, the FCPXML version to write: `11`\n(default) for FCPXML 1.11, or `10` for FCPXML 1.10, for an older editor that can't\nread 1.11.\n\n```bash\nauto-editor example.mp4 --export final-cut-pro:version=10\n```\n\n## Split into clips without further editing\n\nTo split at the cut points but make no other edits, set both actions to `nil`:\n\n```bash\nauto-editor example.mp4 -w:0 nil -w:1 nil --export premiere\n```\n\n## Importing timelines\n\nauto-editor reads timeline/XML files as inputs and renders them like any media:\n\n```bash\nauto-editor myFcp7File.xml -o render.mp4    # render an fcp7 xml (experimental)\nauto-editor timeline.v3 -o render.mp4       # render an auto-editor timeline file\n```\n\nImporters: auto-editor timeline files (`.v1`, `.v2`, `.v3`) and FCP7 XML\n(experimental). The input format is detected by extension. PRs for more importers\nare welcome.\n\n## Timeline format notes\n\n`.v1`/`.v2`/`.v3` are auto-editor's own timeline formats; `.v3` is the current\nlayered format (supports stacked tracks / overlay compositing). See\n<https://auto-editor.com/docs/v3> (and `/docs/v1`, `/docs/v2`). Export a timeline\nto inspect or hand-tweak the edit, then re-import it to render.\n\nFor plain rendering, edit methods, and pace, see the **auto-editor** skill.\n\n<!-- File: skills/auto-editor-transcribe/SKILL.md (Tokens: ~1361 | Category: anthropic-skill) -->\n---\nname: auto-editor-transcribe\ndescription: Transcribe a media file or live microphone to text or subtitles with auto-editor's whisper subcommand, then edit by spoken content — cut to keep (or drop) sections whose subtitles match a word or regex. Use when someone wants a transcript, captions, live speech transcription, or to cut a video based on what is said rather than on loudness.\n---\n\n# Transcribe & edit by speech\n\nUse auto-editor's whisper.cpp (Whisper or NVIDIA Parakeet models) or Apple Speech backend to transcribe audio. Cut a timeline based on subtitle content with `--edit subtitle`/`word`.\n\n## Transcribe — `auto-editor whisper`\n\n```\nauto-editor whisper <file|:mic> <model> [options]\n```\n\nSet `<model>` to a `ggml` model path. Three backends, chosen by the model:\n\n- **Whisper**: `ggml-small.en.bin`, `ggml-medium.en.bin`, `ggml-large-v3.bin`, …\n  (https://huggingface.co/ggerganov/whisper.cpp). 99+ languages, `--translate`,\n  `--prompt`.\n- **Parakeet**: any model with \"parakeet\" in the filename, e.g.\n  `ggml-parakeet-tdt-0.6b-v3-q8_0.bin` (https://huggingface.co/ggml-org/parakeet-GGUF).\n  Faster than Whisper at comparable English accuracy; language is\n  auto-detected. `--translate`, `--prompt`, and `--language` are rejected.\n- **Apple**: the magic model name `apple` uses Apple's built-in transcriber;\n  requires macOS 26 or later.\n\nOnly the first audio stream of a file is used. Audio is resampled to 16 kHz, and\ntext prints to stdout by default.\n\n```bash\nauto-editor whisper example.mp4 ggml-medium.en.bin                      # plain text → stdout\nauto-editor whisper example.mp4 ggml-medium.en.bin --format srt -o out.srt\nauto-editor whisper example.mp4 ggml-parakeet-tdt-0.6b-v3-q8_0.bin      # parakeet backend\nauto-editor whisper example.mp4 apple --language en_US                  # macOS 26+\n```\n\nOptions: `--format text|srt|json`, `-o/--output FILE`, `-l/--language en`\n(default auto), `-tr/--translate` (→ English), `-sw/--split-words` (one word per\ncue), `--queue SECS` (default 30), `--prompt TEXT`, `--threads N` (default 4),\nand `-t/--threshold THRES` (default 0.04).\n\n`--split-words` works with on all backends. Parakeet is the most accurate.\n\nWith the `apple` model, set `--language` to a supported language or locale.\nApple speech cannot auto-detect language, so `auto` falls back to `en_US` with a\nwarning. Do not pass `--translate` or `--prompt`; neither is supported. The first\nuse of a language may download Apple's speech model and therefore needs network\naccess.\n\n### Transcribe a live microphone\n\nPass `:mic` instead of a file. Stop capture gracefully with Ctrl-C.\n\n```bash\nauto-editor whisper :mic ggml-medium.en.bin\nauto-editor whisper :mic apple --language en_US    # macOS 26+\nauto-editor whisper :mic ggml-medium.en.bin -o transcript.srt\n```\n\nThis streams the microphone directly to transcription and does not save a\nmedia recording. To retain and edit the captured audio, use `auto-editor :mic`;\neditor and timeline exports save a sibling lossless-FLAC `_RECORDING.mka` by\ndefault.\n\nLive capture supports macOS, Windows, and Linux:\n\n- macOS uses AVFoundation and prefers a USB microphone, then the system default.\n- Windows uses DirectShow and prefers a USB microphone, then the first audio capture device.\n- Linux uses the default ALSA input device.\n\nWhen `-o/--output` ends in `.srt`, `.json`, `.txt`, or `.text`, the output format is\ninferred unless `--format` is set explicitly.\n\n## Edit by spoken content\n\n`--edit subtitle`/`word` marks the time a matching subtitle line occupies as\n**active** (kept by default). Use an existing subtitle stream, or transcribe to\nan `.srt` first and feed it in.\n\n| Method | Active when… | Args (defaults) |\n|---|---|---|\n| `subtitle` / `regex` | `pattern` (regex) matches a line | `pattern=\"\"` (empty matches every line), `stream=0`, `ignore-case=#f` |\n| `word` | `value` appears as a whole word | `value` required, `stream=0`, `ignore-case=#t` |\n\n`pattern` is optional for `subtitle`/`regex`: with none, the empty regex matches\nevery subtitle line, so `--edit subtitle` keeps all sections that have a subtitle\n(i.e. cut everything with no speech). `word`, by contrast, requires a `value`.\n\n```bash\n# Keep only sections that have any subtitle (cut the silent gaps between speech)\nauto-editor talk.mkv --edit subtitle\n\n# Keep only sections where \"introduction\" is spoken\nauto-editor lecture.mp4 --edit word:introduction\n\n# Regex match (case-insensitive); keep matched lines\nauto-editor talk.mkv --edit \"subtitle:pattern=(yes|no),ignore-case=#t\"\n\n# Cut filler words instead of keeping them: invert with `not`\nauto-editor video.mp4 --edit \"(not word:um)\"\n```\n\n### Transcribe → cut workflow\n\nWhen the media has no subtitle stream, generate a **sidecar** named after the\ninput — for `talk.mp4`, auto-editor auto-loads `talk.srt` (then `talk.ass`) when\nthe requested subtitle stream isn't embedded:\n\n```bash\nauto-editor whisper talk.mp4 ggml-medium.en.bin --format srt -o talk.srt\nauto-editor talk.mp4 --edit word:question        # picks up talk.srt automatically\n```\n\nInspect subtitle streams with `auto-editor subdump FILE` (text subtitles only;\nbitmap subtitles won't dump).\n\nFor loudness/motion-based cutting and pace, see the **auto-editor** skill.\n\n<!-- File: skills/auto-editor/SKILL.md (Tokens: ~2019 | Category: anthropic-skill) -->\n---\nname: auto-editor\ndescription: Record a microphone or edit video/audio with the auto-editor CLI — cut out dead space (silence, motionlessness, black frames), set the pace, make manual cuts, and render the result. Use when someone wants to capture and trim a microphone, remove silence, shorten a recording, speed through quiet parts, or otherwise edit media with auto-editor.\n---\n\n# Editing with auto-editor\n\nauto-editor analyzes a media file, marks every timebase section as **active**\n(e.g. loud) or **inactive** (e.g. silent), then applies an action to each. The\ndefaults: keep active sections unchanged, **cut** inactive ones.\n\n```bash\nauto-editor path/to/video.mp4          # writes video_ALTERED.mp4\nauto-editor video.mp4 -o out.mp4       # choose the output name\n```\n\nRun the installed `auto-editor`, or `./auto-editor` from this repo. `auto-editor\ninfo FILE` shows streams/codecs/duration; `--preview` prints what *would* be cut\nand exits without rendering — use it to sanity-check before a long render.\n\n## Record and edit a microphone\n\nUse `:mic` as the input on macOS, Windows, or Linux. Stop capture gracefully\nwith Ctrl-C; auto-editor then analyzes and edits the recording normally.\n\n```bash\nauto-editor :mic                                      # → mic_ALTERED.wav\nauto-editor :mic --sample-rate 44.1kHz -o trimmed.m4a\nauto-editor :mic --edit audio:threshold=6%\n```\n\nAll normal edit, action, and rendering options apply. Editor and timeline\nexports preserve the source capture separately; use the **auto-editor-export**\nskill for recording-codec and naming details.\n\n## 1. Choose what counts as \"active\" — `--edit METHOD`\n\n`audio:threshold=0.04,stream=all` is the default. Threshold takes a 0–1 fraction\nor a `dB` value (case-sensitive).\n\n| Method | Marks active when… | Key args (defaults) |\n|---|---|---|\n| `audio` | loudest sample ≥ threshold | `threshold=0.04`, `stream=all` |\n| `motion` | frame-to-frame change ≥ threshold | `threshold=0.02`, `stream=0`, `width=400`, `blur=9` |\n| `blackdetect` | frame is mostly black | `threshold=0.98`, `pixel-black=0.10` (wrap in `not` to cut black) |\n| `subtitle`/`regex` | a subtitle line matches `pattern` | `pattern` (required), `ignore-case=#f` |\n| `word` | a whole word appears in subtitles | `value` (required), `ignore-case=#t` |\n| `1` / `0` | **every** / **no** moment is active (keep-all / cut-all) | aliases `none` / `all`; a base for manual ranges |\n\n```bash\nauto-editor video.mp4 --edit audio:threshold=0.04\nauto-editor video.mp4 --edit audio:-19dB            # dB form\nauto-editor video.mp4 --edit motion:threshold=0.02\nauto-editor video.mp4 --edit blackdetect            # cut to remove black: --edit \"(not blackdetect:0.98)\"\n```\n\nCombine streams/methods with boolean operators `or`, `and`, `xor`, `not`. Inside\nan operator, give the method an explicit arg in call form (`audio:0.04`, not bare\n`audio`) — a bare method there errors with `Bad kind`:\n\n```bash\nauto-editor multi.mov --edit \"(or audio:stream=0 audio:threshold=10%,stream=1)\"\nauto-editor video.mp4 --edit \"(or audio:0.03 motion:0.06)\"   # threshold is always positional arg 1\nauto-editor video.mp4 --edit \"(not audio:0.04)\"              # invert: keep the quiet parts\n```\n\n### Labels — more than just silent vs. loud (`--edit:N`, `--when:N`)\n\nEvery moment is tagged with an integer **label** (0–255), and each label has an\naction. Two labels are built in:\n\n| Label | Meaning | Set the membership with | Set the action with (default) |\n|---|---|---|---|\n| `0` | silent / inactive | (whatever `--edit` does *not* match) | `--when-inactive` = `-w:0` = `--when:0` (`cut`) |\n| `1` | normal / active | `--edit EXPR` (i.e. `--edit:1 EXPR`) | `--when-active` = `-w:1` = `--when:1` (`nil`) |\n\nSo plain `--edit audio` is shorthand for `--edit:1 audio`: matched moments become\nlabel 1, the rest stay 0. `-w:0`/`-w:1` are just `--when:0`/`--when:1`.\n\nAdd **custom classes** with `--edit:N EXPR` (N = 2–255) and give each its own\naction with `--when:N ACTION` (default `nil` = keep). Where classes overlap, the\n**higher label wins**:\n\n```bash\n# Cut silence (0) and keep speech (1) as usual, but also zoom wherever there's motion (2)\nauto-editor video.mp4 --edit:2 motion:0.02 --when:2 zoom:2\nauto-editor video.mp4 -e:2 motion:0.1 -w:2 speed:2        # -e/-w short forms\n\n# Three tiers: cut silence, keep quiet speech at 1x, speed up the loud parts\nauto-editor talk.mp4 --edit audio:-30dB --edit:2 audio:-12dB --when:2 speed:1.5\n```\n\n`--edit:0` is rejected — label 0 is the implicit silent class; use `--when:0` to\nact on silent moments. (The `--edit 1` / `--edit 0` *values* above are unrelated:\nthey set label 1's expression to the all-true / all-false constant.)\n\n## 2. Set the pace — `--margin` and `--smooth`\n\n```bash\nauto-editor video.mp4 --margin 0.2sec        # default: pad each kept section by 0.2s both sides\nauto-editor video.mp4 --margin 0.3s,1.5sec   # 0.3s before, 1.5s after (avoids clipped words)\nauto-editor video.mp4 --smooth 0.2s,0.1s     # min-cut 0.2s, min-clip 0.1s (default); --smooth 0 = off\n```\n\n## 3. Manual edits — range syntax\n\n`--cut`, `--keep`, `--set-speed`, `--set-action` take `START,STOP` ranges.\nStart is inclusive, stop exclusive. Default unit is the **timebase**; add `sec`\n(`s`/`second`) for seconds. Vars `start`/`end`; negatives count from the end.\nRanges combine with automatic edits, or use `--edit 0`/`--edit 1` for\nmanual-only editing.\n\n```bash\nauto-editor video.mp4 --cut 0,30 -10sec,end    # drop first 30 frames and last 10s\nauto-editor video.mp4 --keep 0,30sec           # force-keep first 30s regardless of loudness\nauto-editor video.mp4 --set-speed 2,0,30       # SPEED,START,STOP: 2x over frames 0–29\nauto-editor video.mp4 --edit 1 --cut 0,5sec    # no auto cuts, just drop first 5s\nauto-editor video.mp4 --edit 0 --keep 0,5sec   # keep only the first 5s\n```\n\n## 4. Reverse the edit — see what gets cut\n\n```bash\nauto-editor video.mp4 --when-active cut --when-inactive nil   # keep the silence, cut the loud parts\n```\n\n## 5. Render & file size\n\n```bash\nauto-editor video.mp4 -c:v hevc -b:v 0       # variable bitrate\nauto-editor video.mp4 -b:v 230k              # target a bitrate to shrink the file\nauto-editor video.mp4 -crf 23 -preset medium # quality-based encoding\nauto-editor video.mp4 --scale 0.5            # halve the resolution\nauto-editor video.mp4 -anorm ebu             # EBU R128 loudness normalize (or peak:-3)\n```\n\nLarger-than-expected files are usually a too-high auto bitrate — set `-b:v` or `-crf`. `auto-editor cache` lists/`cache clear`s the analysis cache.\n\n## Going further\n\n- Creative effects (speed/zoom/overlays/animations) → **auto-editor-effects** skill\n- Export to Premiere/Resolve/Final Cut, clip-sequence, or `.v1/.v2/.v3` timelines → **auto-editor-export** skill\n- Transcribe audio and cut by spoken words → **auto-editor-transcribe** skill\n- Full option list: `auto-editor --help` or <https://auto-editor.com/ref/options.md>\n</yakaai_skills>"}