Skip to content

Releases: SysAdminDoc/OpenCut

OpenCut v1.25.1 — Media detection + project-folder output fix

20 Apr 16:49

Choose a tag to compare

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 a projectFolder when app.project.path was non-empty (i.e. the .prproj had been saved). Unsaved projects returned "" and the backend fell back to the source clip's directory — for media imported from Downloads/ 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 new projectFolderSource field in the response tells the panel which fallback fired.
  • The panel's Settings → Output directory preference was saved to localStorage but never threaded into the output_dir payload 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 existing output_dir: projectFolder call sites now honour the priority chain automatically.

Gotchas for extension developers

  • JSX walker is getMediaPath-first. Sequences and offline media both return empty getMediaPath(); the difference is sequences have 0 children. Both are skipped cleanly. Bins with type reported as undefined / 0 / 3 on newer Premiere builds are now walked via the "has children" fallback.
  • projectFolder is now the effective output dir, not the raw detected value. The JSX-detected folder lives panel-side in _detectedProjectFolder for 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.gz
  • OpenCut-Server-macOS.tar.gz
  • OpenCut-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

20 Apr 14:15

Choose a tag to compare

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 $HOME paths 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 from host/index.jsx. Removes polling from cut-review, batch-rename, sequence-introspection flows.
  • QE API reflection probeocQeReflect() walks qe.reflect.methods at 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 in opencut/checks.py.
  • 3 new async routes added to _ALLOWED_QUEUE_ENDPOINTS.
  • New blueprint wave_h_bp registered.
  • New error code ROUTE_STUBBED returned 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-line WaveH module 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 7 data-i18n labelled buttons.
  • style.css.oc-wave-h-* + .oc-onboarding-* blocks, dark-mode first, with a 520 px narrow-panel media query.
  • locales/en.json — 10 new wave_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:

  • ruff lint errors in three modules.
  • [standard] extra (numpy / opencv / Pillow) now installed on every runner.
  • ffmpeg installed via brew (macOS), apt-get (Linux), and choco (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.gz
  • OpenCut-Server-macOS.tar.gz
  • OpenCut-Server-Linux.tar.gz

Docker: docker-compose up (CPU) or docker-compose -f docker-compose.gpu.yml up (GPU).

OpenCut v1.16.0

15 Apr 22:53

Choose a tag to compare

v1.16.0 — Security Hardening & Premium Panel Polish

Security & Hardening

  • Path traversal preventionvalidate_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 namesvalidate_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

13 Apr 02:49

Choose a tag to compare

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

13 Apr 02:45

Choose a tag to compare

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

13 Apr 02:42

Choose a tag to compare

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?

13 Apr 02:33

Choose a tag to compare

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

13 Apr 02:30

Choose a tag to compare

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

13 Apr 02:26

Choose a tag to compare

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

13 Apr 02:23

Choose a tag to compare

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.