Releases: stefanwebb/premiere-cli
Release list
v0.4.3
New features
add-transition/batch-add-transitionsaccept audio tracks —
trackType: "audio"was rejected on the assumption that no audio
transition API existed; the QE DOM hasaddTransitionon audio clips
(resolved viagetAudioTransitionByName), so a crossfade can now go on
every cut of an audio track.list-available-transitions/
list-available-audio-transitionsalso now return the real lists (110
video, 3 audio) instead of zero — the QE lists are plain string arrays.add-backgroundcommand — fills given time spans of a video track
with a looped background clip, trimming the final repeat so each span is
covered exactly. Repeats are quantised to whole frames on both the
sequence's and the source's frame grid, so mixed 25/30/50 fps material
tiles gap-free.--dry-runreports the plan; the source item's in/out is
restored afterwards. Loud warning: a background with an audio stream
destroys the audio underneath it — strip the audio from the file first.sync-assetscommand — imports every media file under anassets/
tree into bins mirroring its subdirectories. Existing items with the same
name are relinked rather than re-imported; hidden files and AppleDouble
._*sidecars are skipped.insert-clipscommand — places every clip in a bin whose name begins
MM-SS-FFonto a given track at that timecode; items without a leading
timecode are reported, not guessed, and an out-of-range frame field is
rejected.delete-all-markerscommand — clears every marker on a sequence or
project item in one round trip, instead of onedelete-markercall per
guid.
Bug fixes
- Transition durations were mis-sized. The QE
addTransitionduration
argument isSS.FF(seconds.frames), not decimal seconds, so0.08gave
an 8-frame transition at 25 fps. Durations now go through the
seconds.frames form, video and audio alike.
Documentation
remove-track-intervalssilently desyncs linked A/V clips — on
linked pairs it slips audio source in-points while leaving timeline
positions, duration and coverage correct, so no health metric sees it.
Unlink → apply → relink, verify every pair's
audio.inPointSeconds − video.inPointSecondsagainst the sync offset,
and repair a slipped clip in place withtrim-clip --in-point-seconds.- There is no API way to place video without its audio — the
-1
track index does not do it on Premiere 2026; the source's audio lands on
A1 regardless of targeting and overwrites what was there.
v0.4.2
Bug fixes
desktop-take-screenshotcaptured its own status overlay — the overlay is a real always-on-top window pinned top-right of the screen, andscreencapture -xcaptures the whole screen including it, so its "driving" banner ended up baked into the corner of every screenshot.take_screenshotnow hides the overlay immediately before capturing (instead of showing "driving") and only re-shows it afterward, once the frame is already safely written.
v0.4.1
Bug fixes
desktop-*commands could capture/act mid window-swap —desktop-take-screenshot(and the otherdesktop-*primitives) confirmed Premiere was frontmost via the window server and immediately proceeded, but the actual window-swap animation/redraw can still be in flight at that instant — a screenshot taken right then could show a sliver of the previously-frontmost app._require_frontmostnow waits 0.5s after confirming activation before proceeding, but only when Premiere actually needed to be brought to front — skipped when it was already frontmost, so repeated calls while Premiere stays active aren't slowed down.
v0.4.0
New features
-
Generic
desktop-*UI-automation commands (macOS only, optional
macos-desktopextra):desktop-take-screenshot,desktop-press-key,
desktop-enter-text,desktop-enter-text-with-validate,
desktop-move-mouse,desktop-click-mouse— raw primitives (screenshot,
key press, text entry, mouse move/click) for driving Premiere's native UI
via the Accessibility API + synthetic key/mouse events, for actions
ExtendScript can't do on this build. Each confirms Premiere is frontmost
before sending input. Alsodesktop-notify/desktop-dismiss- notifications— a persistent, always-on-top notification window via a
separate daemon process, so it can be updated in place or dismissed by
later, separate CLI invocations. See
docs/DESKTOP_DRIVER_NOTES.md.(An earlier
desktop-set-input-lutcommand, built the same day on
hand-written AX-tree navigation specific to Premiere's Lumetri "Input
LUT" control, was removed before release in favor of rebuilding that
capability on top of these generic primitives plus AI vision-language
screen understanding.)
v0.3.1
Bug fixes
export-framewas silently exporting the wrong frame —qe.project.getActiveSequence().exportFramePNGignores its position argument on this Premiere build regardless of arg-order (ticks string,Timeobject, output-path-as-position, ...), always exporting whatever frame happened to be currently rendered in the Program Monitor, while still writing a real file and returning success. The command now exports exclusively via Adobe Media Encoder'sexportAsMediaDirect(), narrowing the sequence's in/out points to a single frame around the requested timecode — verified live via pixel diff that exports at different timecodes actually differ and match the requested position.
v0.3.0
New features
init-projectcommand — creates a fresh empty Premiere Pro project from a bundled template
Improvements
- Renamed the CEP extension ID to
com.stefanwebb.premierecli
Infrastructure / Documentation
- Moved the Claude Code plugin into the separate
premiere-ai-skillsrepo