Releases: SysAdminDoc/OpenCut
OpenCut v1.25.1 — Media detection + project-folder output fix
Patch release — two user-reported CEP panel bugs fixed
Fixed
1. Imported media not detected
The ExtendScript walker used an item.type === 2 + !item.getMediaPath heuristic that broke silently on Premiere 25.x, where most bins expose getMediaPath as a function (so the fallback evaluated false and nested media was never recorded). Replaced with a getMediaPath()-first discriminator: non-empty path → record; else has-children → walk as bin; else skip (sequence / offline / exotic). Works across every Premiere version 14–25+.
2. Processed output landing next to source clip instead of in the project folder
Two causes compounded:
getProjectMedia()only returned aprojectFolderwhenapp.project.pathwas non-empty (i.e. the.prprojhad been saved). Unsaved projects returned""and the backend fell back to the source clip's directory — for media imported fromDownloads/or a network share this was never what the user wanted. Added a three-step fallback chain: saved project path → directory of the first imported media → scratch disk path → empty. A newprojectFolderSourcefield in the response tells the panel which fallback fired.- The panel's Settings → Output directory preference was saved to
localStoragebut never threaded into theoutput_dirpayload at job time. Added_recomputeEffectiveOutputDir()that layers the user pref on top of the detected project folder and recomputes on settings save + every media-list refresh. All 77 existingoutput_dir: projectFoldercall sites now honour the priority chain automatically.
Gotchas for extension developers
- JSX walker is
getMediaPath-first. Sequences and offline media both return emptygetMediaPath(); the difference is sequences have 0 children. Both are skipped cleanly. Bins withtypereported asundefined/0/3on newer Premiere builds are now walked via the "has children" fallback. projectFolderis now the effective output dir, not the raw detected value. The JSX-detected folder lives panel-side in_detectedProjectFolderfor anything that needs the raw value.
Installer (Windows): OpenCut-Setup-1.25.1.exe — handles server, FFmpeg, CEP extension, registry, and optional model downloads. No Python required.
Server tarballs (built + attached by CI on tag push):
OpenCut-Server-Windows.tar.gzOpenCut-Server-macOS.tar.gzOpenCut-Server-Linux.tar.gz
Docker: docker-compose up (CPU) or docker-compose -f docker-compose.gpu.yml up (GPU).
Route surface
No new routes in v1.25.1. Total still 1,275 routes across 89 blueprints. Full Wave H feature set from v1.25.0 remains available. Next planned release is v1.26.0 (Wave I — panel polish + agentic script-to-sequence); full roadmap at ROADMAP-NEXT.md.
OpenCut v1.25.0 — Wave H: Commercial Parity & Content-Creator Polish
Wave H — Commercial Parity & Content-Creator Polish
16 new core modules + 1 new blueprint (wave_h_bp) + 34 new routes (1,241 → 1,275). Extends the OSS survey with commercial-product patterns (Opus Clip, Descript, CapCut, ScreenStudio) and post-April-2026 AI projects (FlashVSR, ROSE, Sammie-Roto-2, OmniVoice, ReEzSynth, VidMuse, VideoAgent, ViMax, Hailuo 2.3, Seedance 2.0, GaussianHeadTalk, FantasyTalking2).
Tier 1 — content-creator polish (fully working)
- Virality scoring — 0–100 multimodal heuristic (audio energy × transcript hook × visual salience). Opus Clip inspired.
- Cursor-zoom sidecar parser — ScreenStudio / Screen.Studio / OBS click-log ingestion for screen-recording auto-zoom.
- In-panel changelog toast — GitHub release feed with 15-min cache and offline fallback.
- Crash-to-issue report — pre-filled GitHub issue URL with
$HOMEpaths scrubbed to~. - Demo footage bundle — one-click "Try on demo" for every tab.
- Gist preset sync — push/pull workflow presets, favorites, and workflows through GitHub Gists. Refuses anonymous secret gists.
- First-run onboarding wizard — 5-step tour, skippable, per-profile state.
Tier 2 — new AI backends (stubs, 503 MISSING_DEPENDENCY)
Ships gated behind check_X_available(); routes return 503 with install hints. Full wiring lands in v1.26.0+ once each upstream pins a stable Python entry point.
- FlashVSR (real-time streaming VSR, CVPR'26)
- ROSE (video inpainting preserving shadows/reflections)
- Sammie-Roto-2 (AI rotoscoping v2.3, Mar'26)
- OmniVoice (zero-shot TTS with 600+ languages)
- ReEzSynth (flicker-free Ebsynth successor)
- VidMuse (video-to-music, CVPR'25)
Tier 2 — infrastructure
- BridgeTalk async JSX events — panel now listens for
com.opencut.*CSXS events dispatched fromhost/index.jsx. Removes polling from cut-review, batch-rename, sequence-introspection flows. - QE API reflection probe —
ocQeReflect()walksqe.reflect.methodsat panel startup; result cached in~/.opencut/qe_reflect.json.
Tier 3 — strategic stubs (501 ROUTE_STUBBED)
Route scaffolding for future promotion — VideoAgent + ViMax agentic search/storyboard, Hailuo 2.3 + Seedance 2.0 cloud gen-video, GaussianHeadTalk + FantasyTalking2 advanced lip-sync.
Infrastructure
- 16 new
check_*_available()entries inopencut/checks.py. - 3 new async routes added to
_ALLOWED_QUEUE_ENDPOINTS. - New blueprint
wave_h_bpregistered. - New error code
ROUTE_STUBBEDreturned at HTTP 501 for Tier 3 routes. - ROADMAP-NEXT.md extended with a full Wave H section (22 items documented with upstream sources).
Frontend wiring
client/main.js— 330-lineWaveHmodule with staggered startup probes (1.2 / 1.8 / 2.4 / 3.0 s) so the changelog toast, onboarding tour, QE reflection, and BridgeTalk ping don't race the first health check.index.html— "Panel Polish" card in Settings with 7data-i18nlabelled buttons.style.css—.oc-wave-h-*+.oc-onboarding-*blocks, dark-mode first, with a 520 px narrow-panel media query.locales/en.json— 10 newwave_h.*strings.host/index.jsx— 3 new ES3-safe functions:ocQeReflect(),_ocDispatchEvent(),ocEmitPingEvent().
Tests
36 new tests in tests/test_wave_h.py. Full suite: 7,744 passed / 3 skipped / 0 failed.
CI
Fixed three pre-existing build blockers discovered while shipping Wave H:
rufflint errors in three modules.[standard]extra (numpy / opencv / Pillow) now installed on every runner.ffmpeginstalled viabrew(macOS),apt-get(Linux), andchoco(Windows) in CI.
All three OS builds (Windows, macOS, Linux) now pass green.
Breaking changes
None. Wave H is purely additive.
Server tarballs (uploaded by CI on this tag push):
OpenCut-Server-Windows.tar.gzOpenCut-Server-macOS.tar.gzOpenCut-Server-Linux.tar.gz
Docker: docker-compose up (CPU) or docker-compose -f docker-compose.gpu.yml up (GPU).
OpenCut v1.16.0
v1.16.0 — Security Hardening & Premium Panel Polish
Security & Hardening
- Path traversal prevention —
validate_output_path()added to all 157+ output_path and 100+ output_dir parameters across 43+ route files - FFmpeg concat demux injection — Newline/carriage return stripping in filenames for concat operations
- SSRF prevention — LLM base_url validation blocks non-HTTP schemes
- Information disclosure — Error responses no longer leak raw exception messages
- Docker hardening — Non-root user added to container image
- Windows reserved names —
validate_path()blocks CON, PRN, AUX, NUL, etc. - Atomic file writes — Plugin marketplace manifest and scripting console history use tempfile + os.replace
- Sandbox escape prevention — Scripting console blocks
__import__, exec, eval, compile, open, os, sys, subprocess in AST - Plugin marketplace hardening — plugin_id validation, safe download-scheme validation, zip-slip blocking, archive-size/member-count limits
- User-data quarantine — Corrupt JSON user-data files are quarantined instead of silently lost
Panel UX Polish
- CEP panel — Calmer premium visual system, stronger typography hierarchy, improved editorial copy, better accessibility (skip links, aria-controls, tab semantics)
- UXP panel — Workspace overview with live values, unified clip-selection across tabs, keyboard accessibility improvements, premium guidance cards, richer result/search surfaces
- Shared shot context — One active clip carries across Cut, Captions, Audio, and Video tabs
Backend Improvements
- Structured JSON error handlers for malformed requests, 404s, 405s
- Job cancellation/history integrity fixes
- Queue dispatch reliability improvements
- Env-driven config overrides now flow into live job runtime
- Backward-compatible alias routes for dev scripting endpoints
- Engine preference clearing support ("auto" mode)
- Workflow route accepts both list and dict step payloads
Stats
- 1,152+ API routes | 7,551+ tests | 424 core modules | 88 blueprints
Full Changelog: v1.15.0...v1.16.0
v1.10.3 — Journal Apply to selection
Journal rows now offer 'Apply to selection' for entries that recorded a forward payload, so dialing in silence threshold / caption style / full pipeline on one clip means one click to apply the same params to every subsequent clip. Additive schema migration (ALTER TABLE ADD COLUMN forward_json) — legacy entries render exactly as before; new entries get the button.
v1.10.2 — Persisted Assistant dismissals
Dismiss a Sequence Assistant suggestion and it now sticks per Premiere project across panel reloads. Stored in ~/.opencut/assistant_dismissed.json keyed by project path, union'd with session-scoped dismissals on every /assistant/suggest call. New POST /assistant/dismiss + /assistant/dismiss-clear endpoints.
v1.10.1 — Preflight hookup + more audio previews
L: Preflight modal now fires before /full and /shorts-pipeline too, not just /interview-polish. Pipeline specs were already in PIPELINES; this is the UI wiring.
M: The v1.9.36 /preview/audio route supported 5 filter types on the backend but only denoise had a UI button. Adding two more: a Preview-10s button on the Normalize card (renders at the target LUFS from the preset dropdown) and one on the Silence sub-panel (lets users hear what a given threshold will cut).
v1.10.0 — Sequence Assistant: what should I edit next?
Marquee release of the v1.9.27 → v1.10.0 feature cycle.
A new Assistant card on the Cut tab scans your active Premiere sequence and surfaces up to 5 ranked, one-click suggestions — 'Remove 6 dead-air gaps', 'Generate captions', 'Match loudness across 2 audio tracks', 'Run Interview Polish'. Apply runs the underlying job with the right payload; Dismiss hides a suggestion for the session.
Signals used:
- Inter-clip audio gaps > 800ms
- Absence of caption/subtitle tracks
- Multiple audio tracks with content (loudness variance proxy)
- Sequence duration > 10 min (chapters) / > 15 min + gaps + no captions (full pipeline)
Pure-heuristic — no LLM dependency, ~100ms budget. Extendable via new entries in core/assistant.py.
The full cycle
This release closes out the eight-feature push that started at v1.9.27:
- v1.9.27 Session Context
- v1.9.28 Operation Journal + Rollback
- v1.9.29 Interview Polish pipeline
- v1.9.30 Replay on selected clip
- v1.9.31 CLI
opencut polish - v1.9.32 Batch Interview Polish
- v1.9.33 Preflight checklist
- v1.9.34 Transcript-to-timeline scrubber
- v1.9.35 Visual LUT grid
- v1.9.36 Live audio preview
- v1.10.0 Sequence Assistant
v1.9.36 — Live audio preview
New POST /preview/audio route renders a short slice of a clip with an FFmpeg filter applied and returns WAV bytes — denoise, normalize, compressor, EQ, and silence-preview all wired on the backend. First UI hook is a 'Preview 10s' button under Audio → Denoise's strength slider. Replaces the guess-wait-compare-retry loop with one-click A/B. Additional UI buttons for the other 4 filters are follow-up work.
v1.9.35 — Visual LUT grid
Video → LUTs now shows a card grid with color-swatch previews instead of a plain dropdown. Each of the 10 built-in LUTs has a 4-stop gradient picked to represent its graded look. Click a card to select; the existing apply/intensity logic is unchanged. role=radiogroup + aria-checked for screen readers.
v1.9.34 — Transcript-to-timeline scrubber
Click any transcript segment — editable row or timeline chip — and OpenCut jumps the active Premiere sequence playhead to that segment's start time. Descript-style navigation on top of the existing transcript editor.