Releases: SysAdminDoc/OpenCut
OpenCut v1.9.15
OpenCut v1.9.15
Highlights (v1.9.4 → v1.9.15)
Security & Stability
- 80+ bugs fixed across 12 patch releases
- 4 security vulnerabilities patched (path traversal, symlink escape, model injection)
- 23 crash bugs fixed (callback TypeError, CLI import errors, encoding failures)
- 58 bare ffmpeg/ffprobe subprocess calls resolved for bundled install compatibility
- 14 text file
open()calls fixed withencoding="utf-8"for Windows compatibility
New Features
- Priority WorkerPool — critical jobs leapfrog background work when workers busy
- 23 MCP tools (up from 18) — denoise, upscale, scene detect, depth map, shorts pipeline
- 22 response schemas (up from 13) with OpenAPI coverage for 15+ more endpoints
- 4 new UXP video features — Upscale, Scene Detection, Style Transfer, Shorts Pipeline
- 16 CLI commands (up from 14) —
denoiseandscene-detectadded, 4 broken commands fixed - Docker GPU profile via
docker compose --profile gpu up
Quality
- Comprehensive audit across all routes, core modules, frontend, and infrastructure
- 0 lint warnings, all 18 version targets synced
- 254 routes, 23 MCP tools, 23 schemas, 16 CLI commands verified
- All tests passing
Install
Download OpenCut-Server-Windows.tar.gz, extract, and run OpenCut-Server.exe.
Or install via pip: pip install -e . then opencut-server.
OpenCut v1.9.3
What's New in v1.9.3
Refactored
- Split
video.pyinto 5 domain blueprints — Monolithic 3636-linevideo.pysplit intovideo_core.py(1395),video_editing.py(750),video_fx.py(687),video_specialty.py(489),video_ai.py(443). No file exceeds 1400 lines. All URL paths unchanged — zero breaking changes. @async_jobdecorator adoption — All 97 manual_new_job()+threading.Thread+_update_job(status="complete")patterns across 6 route files converted to the@async_jobdecorator. Fixes a race condition where cancelled jobs could be overwritten to "complete". Removes ~2,800 lines of boilerplate. Decorator extended withfilepath_requiredandfilepath_paramparameters.- App factory pattern —
server.pynow exposescreate_app(config)for isolated Flask instances. Newopencut/config.pycentralizes env var reads intoOpenCutConfigdataclass. Tests use independent app instances. - Install route factory —
make_install_route()inopencut/jobs.pyreplaces 6 identical install endpoint handlers (depth, emotion, multimodal-diarize, broll-generate, face, crisper-whisper) with a single factory call per route. - Version sync CI enforcement —
scripts/sync_version.pynow includespackage.jsonin targets and supports--checkflag. Added to CI pipeline.
Also included (from v1.9.2 changelog)
- JSON structured logging, CI coverage enforcement (50% threshold)
- Structured error migration — zero bare 500 errors remain
- Smart tab reordering by contextual relevance
- 150+ new core module unit tests, ExtendScript mock harness
- Pre-commit hooks (ruff lint/format + pytest smoke)
- Security: replaced
__import__()withimportlib, GPUContext memory leak fix, XSS/injection fixes, timer leak fixes - Codebase at 0 lint warnings
Downloads
OpenCut-Setup-1.9.3.exe— Full self-extracting installer (355 MB) with server + FFmpeg + extensionsOpenCut-Server-v1.9.3-win64.zip— Standalone server distribution (227 MB)
OpenCut v1.9.2
What's New in v1.9.2
v1.9.0 — Core Features
- Contextual Awareness — 35-feature relevance scoring based on clip metadata. Guidance banners and sub-tab highlights based on what you're editing
- Plugin System — Discover, load, and manage plugins from
~/.opencut/plugins/. Ships with timecode-watermark and clip-notes example plugins - Multicam XML Export — Generate Premiere Pro-compatible FCP XML from multicam diarization cuts
- SQLite FTS5 Footage Index — Persistent full-text search index replaces JSON index. Incremental re-indexing via mtime
- NDJSON Response Streaming — Progressive delivery of large result sets (segments, scenes, thumbnails)
- 13 Blueprints, 175+ endpoints — Context and Plugins blueprints added
v1.9.1 — Batch & Testing
- Parallel Batch Processing — ThreadPoolExecutor with GPU/CPU worker isolation, partial failure handling
- Clip Notes Plugin — SQLite-backed per-clip notes with text/CSV export
- 175+ Endpoint Smoke Tests — Full route coverage across all 13 blueprints
v1.9.2 — Quality & Security
- JSON Structured Logging — File handler outputs JSON with timestamp, level, module, job_id
- CI Coverage Enforcement —
pytest-covwith 50% threshold, PR/push triggers - Structured Error Migration — Zero bare
{"error": str(e)}patterns remain. All API errors return{error, code, suggestion} - Smart Tab Reordering — Sub-tabs reorder by contextual relevance scores
- 150+ New Core Module Tests — 28 previously untested modules now covered
- ExtendScript Mock Harness — 38 JSX functions tested under Node.js (35 assertions)
- Pre-commit Hooks — ruff lint/format + pytest smoke on pre-push
Security
- Replaced all
__import__()withimportlib.import_module() - 96 routes hardened:
TooManyJobsError→ proper 429 responses - AI GPU rate limiting prevents concurrent OOM crashes
- XSS fix in engine registry, ASS subtitle injection prevention
- Reframe dimension DoS protection (16-7680px bounds)
Bug Fixes
- GPUContext memory leak —
__exit__now calls.cpu()on models - batch_id collision risk reduced (8→16 hex chars)
- 5 timer/interval leaks fixed (elapsed, mediaScan, poll, SSE parse)
- 23 import sorting + 15 unused import + 4 unused variable fixes
- Codebase at 0 lint warnings
Downloads
OpenCut-Server-v1.9.2-win64.zip— Standalone server (extract & run)OpenCut-Setup.exe— WPF installer with optional dependency management
OpenCut v1.9.0
OpenCut v1.9.0 — AI Detection Upgrades, OTIO Export, Emotion Highlights
New Features
Silero VAD — Neural Silence Detection
- AI-powered voice activity detection as an alternative to energy threshold
- Three modes:
energy(classic FFmpeg),vad(Silero neural),auto(tries VAD first, falls back to energy) - Far more accurate in noisy environments — uses a 1.8MB ONNX model, <1ms per 30ms chunk
- Dropdown selector in the Silence Removal panel
CrisperWhisper — Verbatim Filler Detection
- New filler detection backend using the nyrahealth/CrisperWhisper model
- Transcribes speech verbatim, explicitly marking fillers as [UH] and [UM] with precise timestamps
- Standard Whisper actively omits fillers — CrisperWhisper captures them all
- Selectable via dropdown in the Filler Word Detection panel
Robust Video Matting (RVM)
- New background removal backend with temporal consistency across frames
- Uses a recurrent neural network that exploits temporal information — no flickering between frames
- Two models:
mobilenetv3(fast) orresnet50(higher quality) - Selectable alongside existing rembg backend in the Video AI panel
Florence-2 Auto Watermark Detection
- New
/video/auto-detect-watermarkendpoint - Uses Florence-2 vision-language model to automatically locate watermark regions
- Detects logos, text overlays, and watermarks with a natural language prompt
- Edge-density fallback when Florence-2 is not installed
Emotion-Based Highlights
- New
emotion_highlights.pycore module using deepface facial expression analysis - Builds an emotion curve over time, identifying peaks of emotional significance
- New "Emotion Highlights (Face AI)" button in the Captions tab
- Complements LLM-based highlight extraction with visual emotion signals
Engagement Scoring
- Multi-signal highlight quality scoring: hook strength, emotional peak, pacing, quotability
- Blended with LLM scores (60% LLM, 40% engagement) for better highlight ranking
- Engagement breakdown returned in shorts pipeline and highlight extraction responses
OpenTimelineIO Export
- New
/timeline/export-otioendpoint with three modes: cuts, segments, markers - Universal timeline interchange format supported by DaVinci Resolve, Avid, FCP, and more
- Export silence/filler cuts as an OTIO file importable into any compatible NLE
Improved Thumbnail Scoring
- Composition balance analysis via edge density in quadrants
- Center interest bonus for well-framed subjects
- Motion blur penalty using gradient variance detection
Frontend & UXP Improvements
- Detection method dropdown for silence removal (energy / VAD / auto)
- Filler backend selector (Whisper / CrisperWhisper)
- Background removal backend selector (rembg / RVM) with model list update
- Project media scan debouncing prevents redundant API calls
- Capability cache resets on disconnect so buttons re-evaluate on reconnect
- Non-2xx HTTP responses properly surfaced as errors in API layer
- UXP panel:
AbortSignal.timeout()polyfill for older UXP runtimes - UXP panel:
PProBridge.getProjectItems()for project media browsing - ExtendScript: import verification polling (replaces single-check), indentation cleanup
Backend
- 7 new dependency checks: silero_vad, crisper_whisper, sam2, propainter, otio, deepface, rvm
- Capabilities reported in
/healthresponse (silero_vad, crisper_whisper, otio) - New docs: RESEARCH.md, ROADMAP.md (moved to docs/), UXP_MIGRATION.md
Install
Download OpenCut-Setup-1.9.0.exe below — handles everything (server, FFmpeg, CEP extension, registry keys, desktop shortcut). No Python or FFmpeg required.
Or from source:
git clone https://github.com/SysAdminDoc/OpenCut.git
cd OpenCut
pip install -e ".[all]"
python -m opencut.serverOpenCut v1.8.0
OpenCut v1.8.0 — Workflow Engine, Job Persistence, i18n, Docker
New Features
Workflow Engine
- Chain multi-step processing into reusable workflows (e.g., silence removal → captions → export)
- 6 built-in presets: Clean Interview, Podcast Polish, Social Clip, YouTube Upload, Documentary Rough, Studio Audio
- Save/delete custom workflows; inter-step cancellation support
SQLite Job Persistence
- Jobs survive server restarts — history stored in
~/.opencut/jobs.db(WAL mode) - Interrupted job recovery on startup with user notification
- Job stats and paginated history endpoint
Structured Error Taxonomy
- Every error now returns
{error, code, suggestion}JSON - 13 factory constructors (missing_dependency, gpu_out_of_memory, rate_limited, etc.)
safe_error()auto-classifies Python exceptions into structured responses- Frontend
showAlert()readssuggestionfield for actionable recovery hints
Frontend Overhaul
- Keyboard shortcuts with configurable bindings and reference card
- Quick action buttons on Cut, Captions, Audio, and Video tabs (one-click workflows)
- Cut review panel — preview and approve/reject cuts before applying
- Status bar with live system health, GPU usage, and job count
- i18n system with English locale (
data-i18nattributes,t()function) - Project templates: 6 built-in (YouTube, Shorts, TikTok/Reels, Podcast, Cinema, Broadcast)
- Preset export/import for sharing settings as JSON files
- Lazy tab rendering for faster panel startup
- Toast reflow and enhanced error display
10 Themes
- 4 new light themes: Snowlight, Latte, Solarized, Paper
- Light-theme overrides for ~40 components including scrollbar, hover states, toasts
- Total: 6 dark + 4 light themes
Responsive Design
- 4 breakpoints (800px, 480px, 440px, 380px) for compact panel sizes
- Complete interactive states for all button variants
- Focus-visible rings on 15 interactive elements
- 4px spacing rhythm enforced throughout
Docker Support
- Multi-stage Dockerfile (Python 3.12 + FFmpeg + optional deps)
- docker-compose.yml with GPU variant and named volume for
~/.opencut - .dockerignore for minimal build context
Backend Infrastructure
- Job-ID log correlation — every log line tagged with
[job_id] /logs/tailendpoint for filtered real-time log viewing/templates/list,/templates/save,/templates/applyendpoints- Vite build pipeline config for future bundling
- TypeScript config for incremental migration
Bug Fixes & Improvements
- Audio route refactored for cleaner error handling
- Security module expanded with additional validation
~/.opencut/packagesnow inserted at priority position in sys.path- Enhanced job system with thread-local job_id and safe_error delegation
Install
Download OpenCut-Setup-1.8.0.exe below — it handles everything (server, FFmpeg, CEP extension, registry keys, desktop shortcut). No Python or FFmpeg required.
Or from source:
git clone https://github.com/SysAdminDoc/OpenCut.git
cd OpenCut
pip install -e ".[all]"
python -m opencut.serverOpenCut v1.7.2
Improvements
Pip Install Permission Fallbacks
safe_pip_install()now has a 3-tier fallback: normal →--user→--target ~/.opencut/packages- Whisper install and reinstall routes use the same permission fallback chain
--prefer-binaryflag added to all pip installs (avoids needing Rust/C compilers)- Actionable error messages when Rust compilation fails (links to rustup.rs)
~/.opencut/packagesadded tosys.pathat server startup for--targetinstalls
UI Polish
- Toast notifications — Repositioned to bottom-center with upward stacking (no more overlapping)
- Panel default size — Increased to 900x800 (from 520x700), min width 480px (from 400px)
Full changelog: v1.7.1...v1.7.2
OpenCut v1.7.1
Bug Fixes (Batch 35)
- Color match completely broken —
run_ffmpeg()returnsstrbut code accessed.returncode/.stderr(CompletedProcess attributes). Fixed return value handling. - Auto-edit XML destroyed before use —
finally: shutil.rmtree(temp_dir)deleted the XML result before the caller could access it. Now copies to persistent temp dir first. - ExtendScript marker iteration unreliable — Switched
seqMarkers[i]indexed access togetFirstMarker()/getNextMarker()iterator pattern (reliable across Premiere versions). - Silence speed-up slider always invisible — CSS
hiddenclass couldn't be overridden bystyle.display="". Fixed withclassList.toggle(). - Translate Pipeline workflow never translated — Only transcribed. Added explicit
/captions/translatestep. - Social Ready workflow missing captions — Added
/captions/burn-instep to match UI description. - Styled captions checkboxes dead —
word_highlightandauto_emojivalues never sent in API payload. - Workflow denoise method mismatch — Hardcoded
rnnoisebut UI only offersafftdn. Fixed. - Cancel/complete race condition — SSE could fire "complete" after cancel, causing unwanted auto-import.
- NLP auto-execute stale clip —
selectedPathcaptured at callback time, not command time. Fixed with snapshot. - Timeline cuts NaN sort corruption — String/null cut times produced NaN in sort comparator, corrupting clip deletion order.
- Export range persistent side effect —
setInPoint/setOutPointpersisted after export, constraining future playback. - Caption track inflated count — Returned original array length instead of actual written segments.
- Export video no progress — Missing
-progress pipe:1flag meant progress bar stuck at 20%. - Export video no timeout — Hung FFmpeg blocked thread forever. Added scaled timeout with kill.
- Export video partial file leak — Failed FFmpeg left corrupt output files on disk.
- 10 duplicate HTML class attributes — Second
class=silently ignored by parser, losing spacing utilities.
Full changelog: v1.7.0...v1.7.1
OpenCut v1.7.0
UI/UX Polish, Accessibility & Design System Overhaul
CEP Panel
- Friendlier error messages and alerts throughout
- ARIA accessibility attributes on interactive elements
- SVG icons replacing emoji for cross-platform consistency
- Card descriptions added to each tool panel for discoverability
- Clearer labels: "Keep Padding", "Custom Fillers", "Fast/Precise" trim modes
- Enhanced error hints for timeouts, connection failures, and missing deps
CSS Design System
- 4px spacing rhythm with new
--sp-2xltoken - Layered shadow tokens (
--shadow-smthrough--shadow-xl,--shadow-inner, glow variants) - New
--neon-yellowand--neon-pinkaccent variables - Improved font stacks with Segoe UI / Cascadia Code fallbacks
- Tighter border radii for a more refined look
UXP & ExtendScript
- UXP style updates for visual consistency
- ExtendScript host improvements
Full Changelog: v1.6.0...v1.7.0
OpenCut v1.6.0 — Architecture Overhaul
v1.6.0 — Architecture Overhaul
Major infrastructure improvements across 3 phases.
New Modules
- opencut/schemas.py — 15 dataclass response schemas (JobResponse, SilenceResult, LoudnessMatchResult, ColorMatchResult, etc.) with
to_dict()serialization. Prevents the field-name mismatch bug class that caused ~40 bugs in v1.5.x. - opencut/gpu.py —
GPUContextcontext manager for automatic VRAM cleanup.register()tracks models,__exit__doesdel+torch.cuda.empty_cache(). Replaces 46 scattered try/finally patterns across 12 core modules. - opencut/workers.py —
WorkerPool(ThreadPoolExecutor-based) withJobPrioritylevels. Replaces raw thread spawning inasync_jobdecorator. Bounded concurrency, Future tracking, clean shutdown via atexit. - opencut/openapi.py — Auto-generated OpenAPI 3.0 spec from Flask routes + schema dataclasses.
GET /openapi.jsonserves the live spec.
Security
- CSRF token rotation — 1-hour TTL, rotating pool of 10 tokens, grace window for in-flight requests. Replaces static token that was valid forever. Constant-time comparison via
hmac.compare_digest.
Performance
- FFmpeg path caching —
get_ffmpeg_path()/get_ffprobe_path()doshutil.which()once and cache. Pre-warmed on server startup. - Premiere state caching — CEP+UXP panels cache sequence info and project items with 8s TTL, invalidated on tab switch. Eliminates redundant ExtendScript evalScript() round-trips.
Auto-Update
GET /system/update-check— Compares current version against latest GitHub release. 1-hour cache, 5s timeout, fails silently offline. CEP+UXP show toast when update available.
Testing
- 25 new integration tests — Flask test client tests covering /health, /openapi.json, CSRF protection, search validation, deliverables, NLP, settings masking, timeline validation
- 128 total tests (103 unit + 25 integration), all passing
Dev Tooling
- Version sync now covers UXP —
sync_version.pysyncs 18 targets (was 15), no more manual UXP version updates - CI runs tests —
pyteststep added to GitHub Actions workflow before PyInstaller build
Downloads
OpenCut-Setup-1.6.0.exe— Windows installer (Inno Setup)OpenCut-Server-v1.6.0-win-x64.zip— Portable standalone server
OpenCut v1.5.6 — Security + Stability Fixes
Batch 34: UNC path blocking in validate_path (SSRF/NTLM prevention), stuck job auto-expiry (2hr timeout), zombie process reaping, async_job thread tracking, registry path sanitization, ExtendScript projectItem reset safety.