Skip to content

Commit a003d7f

Browse files
committed
feat: v1.9.9 — UXP parity (4 video features), schemas, test fixes
UXP Panel: - Add AI Upscale card (Real-ESRGAN 2x/3x/4x with model selector) - Add Scene Detection card (FFmpeg/TransNetV2/PySceneDetect + sensitivity) - Add Style Transfer card (8 preset styles + intensity slider) - Add Shorts Pipeline card (one-click with face tracking + captions toggles) - Fix stale "1.9.2" version in Settings tab - Wire all 4 new handlers with job polling + toast notifications Backend: - 9 new response schemas (22 total) + OpenAPI coverage for 15 more routes - 3 remaining bare "ffprobe" fixed in audio.py, video_editing.py, utils/media.py - FFmpeg/ffprobe path warnings when binary not found - Worker pool shutdown fixture prevents pytest exit hang - 2 broken test assertions fixed
1 parent 17ece41 commit a003d7f

19 files changed

Lines changed: 248 additions & 21 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## [1.9.9] - 2026-03-27
4+
5+
### Added
6+
- **UXP: 4 new Video features** — AI Upscale (Real-ESRGAN 2x/3x/4x), Scene Detection (FFmpeg/TransNetV2/PySceneDetect), Style Transfer (8 preset styles with intensity slider), Shorts Pipeline (one-click short-form clip generation with face tracking + captions).
7+
- **UXP: full JS handlers**`runUpscaleUxp()`, `runSceneDetectUxp()`, `runStyleTransferUxp()`, `runShortsPipelineUxp()` with proper job polling, error handling, and toast notifications.
8+
9+
### Fixed
10+
- **UXP stale version** — Settings tab showed hardcoded "1.9.2" instead of actual version. Now dynamic via version sync.
11+
312
## [1.9.8] - 2026-03-27
413

514
### Added

CLAUDE.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
- Lint: `ruff check opencut/` — codebase is fully clean, pre-commit enforces on every commit
181181

182182
## Version
183-
- Current: **v1.9.8**
183+
- Current: **v1.9.9**
184184
- All version strings: `pyproject.toml`, `__init__.py`, `CSXS/manifest.xml` (ExtensionBundleVersion + Version), `com.opencut.uxp/manifest.json`, `com.opencut.uxp/main.js` (VERSION const), `index.html` version display, README badge, `package.json`
185185
- Use `python scripts/sync_version.py --set X.Y.Z` to update all 19 targets at once (including UXP files and package.json)
186186
- Use `python scripts/sync_version.py --check` in CI to verify all targets match
@@ -919,6 +919,10 @@ enhance = ["resemble-enhance>=0.0.1"]
919919
- **10 duplicate class attributes in HTML** — 10 elements had two `class=` attributes; HTML parser silently ignores the second, losing spacing utilities (mt-xs, mt-sm, mb-sm, mt-md). All merged into single attributes.
920920
- **pip install permission denied**`safe_pip_install()` failed on Windows when both normal and `--user` installs hit Errno 13 (Microsoft Store Python, OneDrive-synced user dirs, restrictive ACLs). Added `--target ~/.opencut/packages` as third fallback strategy. server.py adds `~/.opencut/packages` to `sys.path` at startup.
921921

922+
## v1.9.9 Batch 41 (UXP Feature Parity)
923+
- **4 new UXP Video features** — AI Upscale, Scene Detection, Style Transfer, Shorts Pipeline. Full HTML cards + JS handlers with job polling.
924+
- **UXP stale version fixed** — Settings showed "1.9.2" hardcoded. Now synced via version script.
925+
922926
## v1.9.8 Batch 40 (Schemas, OpenAPI, Test Fixes)
923927
- **9 new response schemas** — WorkflowResult, ContextAnalysisResult, VideoAIResult, ShortsPipelineResult, DepthMapResult, BrollPlanResult, BatchResult, PluginListResult (22 total).
924928
- **OpenAPI +15 endpoints** — typed response schemas for all AI video, depth, shorts, workflow, context routes.

Install.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ Write-Host " \___/| .__/ \___|_| |_|\____\__,_|\__|" -ForegroundColor Cyan
155155
Write-Host " |_| " -ForegroundColor Cyan
156156
Write-Host ""
157157
Write-Host " Open Source Video Editing Automation" -ForegroundColor DarkGray
158-
Write-Host " Installer v1.9.8" -ForegroundColor DarkGray
158+
Write-Host " Installer v1.9.9" -ForegroundColor DarkGray
159159

160160
$isAdmin = Test-IsAdmin
161161
if ($isAdmin) {

OpenCut.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
; Fully self-contained installer — bundles server exe, ffmpeg, and CEP extension
33

44
#define MyAppName "OpenCut"
5-
#define MyAppVersion "1.9.8"
5+
#define MyAppVersion "1.9.9"
66
#define MyAppPublisher "SysAdminDoc"
77
#define MyAppURL "https://github.com/SysAdminDoc/OpenCut"
88

extension/com.opencut.panel/CSXS/manifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<ExtensionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
Version="7.0"
44
ExtensionBundleId="com.opencut.panel"
5-
ExtensionBundleVersion="1.9.8"
5+
ExtensionBundleVersion="1.9.9"
66
ExtensionBundleName="OpenCut">
77

88
<ExtensionList>
9-
<Extension Id="com.opencut.panel.main" Version="1.9.8" />
9+
<Extension Id="com.opencut.panel.main" Version="1.9.9" />
1010
</ExtensionList>
1111

1212
<ExecutionEnvironment>

extension/com.opencut.panel/client/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3262,7 +3262,7 @@ <h1 class="content-title" id="contentTitle">Cut & Clean</h1>
32623262
<div class="card-header"><div class="card-title" data-i18n="settings.about">About OpenCut</div></div>
32633263
<div class="settings-row">
32643264
<span class="settings-label">Version</span>
3265-
<span class="settings-value">1.9.8</span>
3265+
<span class="settings-value">1.9.9</span>
32663266
</div>
32673267
<div class="about-links">
32683268
<a href="https://github.com/SysAdminDoc/opencut" class="about-link" target="_blank">GitHub</a>

extension/com.opencut.panel/client/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
OpenCut CEP Panel - Main Controller v1.9.8
2+
OpenCut CEP Panel - Main Controller v1.9.9
33
6-Tab Professional Toolkit
44
============================================================ */
55
(function () {

extension/com.opencut.panel/client/style.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
OpenCut CEP Panel v1.9.8 - ULTRA PREMIUM EDITION
2+
OpenCut CEP Panel v1.9.9 - ULTRA PREMIUM EDITION
33
Next-Generation AI Editing Suite for Adobe Premiere Pro
44
============================================================ */
55

extension/com.opencut.panel/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "opencut-panel",
3-
"version": "1.9.8",
3+
"version": "1.9.9",
44
"private": true,
55
"description": "OpenCut CEP Panel for Adobe Premiere Pro",
66
"scripts": {

extension/com.opencut.uxp/index.html

Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<path d="M4 2.5a3 3 0 00-1.76 5.43L7.33 11l-5.09 3.07A3 3 0 104.8 19.5a3 3 0 001.76-5.43L8.93 12.6 16.5 17V5L8.93 9.4 6.56 7.93A3 3 0 004 2.5z" fill="var(--accent)"/>
1717
</svg>
1818
<span class="oc-logo">OpenCut</span>
19-
<span class="oc-version">v1.9.8</span>
19+
<span class="oc-version">v1.9.9</span>
2020
</div>
2121
<div class="oc-header-right">
2222
<div class="oc-connection" id="connectionStatus" title="Backend connection status">
@@ -595,6 +595,110 @@
595595
</div>
596596
</div>
597597

598+
<div class="oc-section-title">AI Upscale</div>
599+
<div class="oc-card">
600+
<div class="oc-card-header collapsible" data-target="upscaleBody">
601+
<span>Real-ESRGAN Video Upscale</span>
602+
<svg class="oc-chevron" width="10" height="10" viewBox="0 0 16 16" fill="currentColor"><path d="M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z"/></svg>
603+
</div>
604+
<div class="oc-card-body" id="upscaleBody">
605+
<div class="oc-field-row">
606+
<label class="oc-label" for="upscaleScaleUxp">Scale Factor</label>
607+
<select class="oc-select" id="upscaleScaleUxp">
608+
<option value="2" selected>2x</option>
609+
<option value="3">3x</option>
610+
<option value="4">4x</option>
611+
</select>
612+
</div>
613+
<div class="oc-field-row">
614+
<label class="oc-label" for="upscaleModelUxp">Model</label>
615+
<select class="oc-select" id="upscaleModelUxp">
616+
<option value="realesrgan-x4plus" selected>RealESRGAN x4plus</option>
617+
<option value="realesrgan-x4plus-anime">Anime</option>
618+
<option value="realesrgan-x2plus">RealESRGAN x2plus</option>
619+
</select>
620+
</div>
621+
<button class="oc-btn oc-btn-primary oc-btn-full" id="runUpscaleBtnUxp">Upscale Video</button>
622+
</div>
623+
</div>
624+
625+
<div class="oc-section-title">Scene Detection</div>
626+
<div class="oc-card">
627+
<div class="oc-card-header collapsible" data-target="sceneDetectBody">
628+
<span>Detect Scene Boundaries</span>
629+
<svg class="oc-chevron" width="10" height="10" viewBox="0 0 16 16" fill="currentColor"><path d="M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z"/></svg>
630+
</div>
631+
<div class="oc-card-body" id="sceneDetectBody">
632+
<div class="oc-field-row">
633+
<label class="oc-label" for="sceneMethodUxp">Method</label>
634+
<select class="oc-select" id="sceneMethodUxp">
635+
<option value="ffmpeg" selected>FFmpeg Threshold</option>
636+
<option value="ml">TransNetV2 (ML)</option>
637+
<option value="pyscenedetect">PySceneDetect</option>
638+
</select>
639+
</div>
640+
<div class="oc-slider-row">
641+
<label class="oc-label" for="sceneThresholdUxp">Sensitivity</label>
642+
<input type="range" class="oc-slider" id="sceneThresholdUxp" min="0.1" max="0.9" value="0.3" step="0.05">
643+
<span class="oc-slider-val" id="sceneThresholdValUxp">0.30</span>
644+
</div>
645+
<button class="oc-btn oc-btn-primary oc-btn-full" id="runSceneDetectBtnUxp">Detect Scenes</button>
646+
</div>
647+
</div>
648+
649+
<div class="oc-section-title">Style Transfer</div>
650+
<div class="oc-card">
651+
<div class="oc-card-header collapsible" data-target="styleTransferBody">
652+
<span>AI Style Transfer</span>
653+
<svg class="oc-chevron" width="10" height="10" viewBox="0 0 16 16" fill="currentColor"><path d="M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z"/></svg>
654+
</div>
655+
<div class="oc-card-body" id="styleTransferBody">
656+
<div class="oc-field-row">
657+
<label class="oc-label" for="styleNameUxp">Style</label>
658+
<select class="oc-select" id="styleNameUxp">
659+
<option value="candy" selected>Candy</option>
660+
<option value="mosaic">Mosaic</option>
661+
<option value="starry_night">Starry Night</option>
662+
<option value="la_muse">La Muse</option>
663+
<option value="udnie">Udnie</option>
664+
<option value="rain_princess">Rain Princess</option>
665+
<option value="the_scream">The Scream</option>
666+
<option value="pointilism">Pointilism</option>
667+
</select>
668+
</div>
669+
<div class="oc-slider-row">
670+
<label class="oc-label" for="styleIntensityUxp">Intensity</label>
671+
<input type="range" class="oc-slider" id="styleIntensityUxp" min="0" max="100" value="100" step="5">
672+
<span class="oc-slider-val" id="styleIntensityValUxp">100%</span>
673+
</div>
674+
<button class="oc-btn oc-btn-primary oc-btn-full" id="runStyleTransferBtnUxp">Apply Style</button>
675+
</div>
676+
</div>
677+
678+
<div class="oc-section-title">Shorts Pipeline</div>
679+
<div class="oc-card">
680+
<div class="oc-card-header collapsible" data-target="shortsPipelineBody">
681+
<span>One-Click Short-Form Clips</span>
682+
<svg class="oc-chevron" width="10" height="10" viewBox="0 0 16 16" fill="currentColor"><path d="M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z"/></svg>
683+
</div>
684+
<div class="oc-card-body" id="shortsPipelineBody">
685+
<p class="oc-hint">Transcribe, detect highlights, face-reframe, burn captions, and export short-form clips in one step.</p>
686+
<div class="oc-field-row">
687+
<label class="oc-label" for="shortsMaxUxp">Max Clips</label>
688+
<input type="number" class="oc-input" id="shortsMaxUxp" value="5" min="1" max="20">
689+
</div>
690+
<div class="oc-check-row">
691+
<input type="checkbox" id="shortsFaceTrackUxp" checked>
692+
<label for="shortsFaceTrackUxp">Face tracking reframe</label>
693+
</div>
694+
<div class="oc-check-row">
695+
<input type="checkbox" id="shortsCaptionsUxp" checked>
696+
<label for="shortsCaptionsUxp">Burn-in captions</label>
697+
</div>
698+
<button class="oc-btn oc-btn-primary oc-btn-full" id="runShortsPipelineBtnUxp">Generate Shorts</button>
699+
</div>
700+
</div>
701+
598702
<div class="oc-section-title">Social Media Upload</div>
599703
<div class="oc-card">
600704
<div class="oc-card-header collapsible" data-target="socialBody">
@@ -983,7 +1087,7 @@
9831087
<div class="oc-card">
9841088
<div class="oc-field-row">
9851089
<span class="oc-label">Version</span>
986-
<span>1.9.2 (UXP)</span>
1090+
<span id="uxpVersionDisplay">1.9.8 (UXP)</span>
9871091
</div>
9881092
<div class="oc-field-row">
9891093
<span class="oc-label">Panel</span>

0 commit comments

Comments
 (0)