Skip to content

Commit 1bc4572

Browse files
committed
fix: v1.7.2 — pip permission fallbacks, toast stacking, panel sizing
Pip install now tries normal, --user, and --target ~/.opencut/packages as permission fallback chain. Actionable error messages for Rust/compiler failures. Toast notifications stack upward from bottom-center. Panel default size increased to 900x800 with 480px min width.
1 parent 0ef48d0 commit 1bc4572

21 files changed

Lines changed: 255 additions & 152 deletions

File tree

CLAUDE.md

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

122122
## Version
123-
- Current: **v1.7.1**
123+
- Current: **v1.7.2**
124124
- 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
125125
- Use `python scripts/sync_version.py --set X.Y.Z` to update all 18 targets at once (including UXP files)
126126

@@ -165,6 +165,7 @@
165165
- **CSS `hidden` class vs `style.display`** — Setting `style.display=""` does NOT override a `display:none` from a CSS class. Use `classList.toggle("hidden", ...)` or `classList.remove("hidden")` instead.
166166
- **Workflow preset steps** — Each step must be a self-contained `{endpoint, payload, label}` object. Do NOT rely on `pendingTranslate`/`pendingBurnin` flags for chaining — those only work for manual button clicks, not workflow presets.
167167
- **Duplicate HTML `class` attributes** — HTML parser silently discards the second `class=` attribute. Always merge into a single `class="cls1 cls2"`. Grep with `class=".+" class="` to detect.
168+
- **pip `--target` fallback**`safe_pip_install()` has 3 strategies: normal → `--user``--target ~/.opencut/packages`. The `--target` dir is created at install time and added to `sys.path` both in security.py (immediately) and server.py (on startup). Packages installed via `--target` are importable without restart.
168169
- **`cancelJob()` order** — Close SSE/poll streams BEFORE nulling `currentJob` to prevent in-flight events from triggering `onJobDone` after cancel.
169170
- **Never `git add -A`**`installer/bin/`, `installer/obj/`, `installer/publish/` are build artifacts NOT in `.gitignore` (they're tracked in the repo). Use specific file paths when staging.
170171
- **Frozen builds**`sys.executable` points to the exe, not Python. `safe_pip_install()` and `_setup_system_site_packages()` detect frozen state and find system Python from PATH instead.
@@ -803,3 +804,4 @@ enhance = ["resemble-enhance>=0.0.1"]
803804
- **export_video no timeout**`proc.wait()` had no timeout; hung FFmpeg process blocked the thread forever. Added scaled timeout with kill.
804805
- **export_video partial file leak** — Failed FFmpeg runs left corrupt partial output files on disk. Added cleanup on non-zero exit.
805806
- **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.
807+
- **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.

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.7.1" -ForegroundColor DarkGray
158+
Write-Host " Installer v1.7.2" -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.7.1"
5+
#define MyAppVersion "1.7.2"
66
#define MyAppPublisher "SysAdminDoc"
77
#define MyAppURL "https://github.com/SysAdminDoc/OpenCut"
88

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# OpenCut
22

3-
![Version](https://img.shields.io/badge/version-1.7.1-blue)
3+
![Version](https://img.shields.io/badge/version-1.7.2-blue)
44
![License](https://img.shields.io/badge/license-MIT-green)
55
![Platform](https://img.shields.io/badge/platform-Windows%2010%2F11-0078D4)
66
![Python](https://img.shields.io/badge/Python-3.9+-3776AB?logo=python&logoColor=white)
@@ -20,7 +20,7 @@
2020

2121
**Option A -- Installer exe (recommended):**
2222

23-
Download `OpenCut-Setup-1.7.1.exe` from [Releases](https://github.com/SysAdminDoc/OpenCut/releases) and run it. The installer handles everything: server exe, FFmpeg, CEP extension deployment, registry keys, desktop shortcut, and optional Whisper model download. **No Python or FFmpeg needed.**
23+
Download `OpenCut-Setup-1.7.2.exe` from [Releases](https://github.com/SysAdminDoc/OpenCut/releases) and run it. The installer handles everything: server exe, FFmpeg, CEP extension deployment, registry keys, desktop shortcut, and optional Whisper model download. **No Python or FFmpeg needed.**
2424

2525
**Option B -- From source (requires Python 3.9+ and [FFmpeg](https://ffmpeg.org/download.html) on PATH):**
2626

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

Lines changed: 5 additions & 5 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.7.1"
5+
ExtensionBundleVersion="1.7.2"
66
ExtensionBundleName="OpenCut">
77

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

1212
<ExecutionEnvironment>
@@ -41,12 +41,12 @@
4141
<Menu>OpenCut</Menu>
4242
<Geometry>
4343
<Size>
44-
<Height>700</Height>
45-
<Width>520</Width>
44+
<Height>800</Height>
45+
<Width>900</Width>
4646
</Size>
4747
<MinSize>
4848
<Height>400</Height>
49-
<Width>400</Width>
49+
<Width>480</Width>
5050
</MinSize>
5151
</Geometry>
5252
<Icons>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2947,7 +2947,7 @@ <h1 class="content-title" id="contentTitle">Cut & Clean</h1>
29472947
<div class="card-header"><div class="card-title">About OpenCut</div></div>
29482948
<div class="settings-row">
29492949
<span class="settings-label">Version</span>
2950-
<span class="settings-value">1.7.1</span>
2950+
<span class="settings-value">1.7.2</span>
29512951
</div>
29522952
<div class="about-links">
29532953
<a href="https://github.com/SysAdminDoc/opencut" class="about-link" target="_blank">GitHub</a>

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
OpenCut CEP Panel - Main Controller v1.7.1
2+
OpenCut CEP Panel - Main Controller v1.7.2
33
6-Tab Professional Toolkit
44
============================================================ */
55
(function () {
@@ -4144,6 +4144,10 @@
41444144
var toast = document.createElement("div");
41454145
toast.className = "toast-notification " + (type || "info");
41464146
toast.textContent = message;
4147+
// Stack toasts upward from the bottom
4148+
var liveToasts = document.querySelectorAll(".toast-notification");
4149+
var offset = 48 + liveToasts.length * 44;
4150+
toast.style.bottom = offset + "px";
41474151
document.body.appendChild(toast);
41484152
setTimeout(function () {
41494153
toast.classList.add("fade-out");

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

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

@@ -3091,36 +3091,38 @@ input[type="checkbox"] {
30913091
============================================================ */
30923092
.toast-notification {
30933093
position: fixed;
3094-
top: 12px;
3095-
right: 12px;
3094+
bottom: 48px;
3095+
left: 50%;
3096+
transform: translateX(-50%);
30963097
background: var(--bg-card);
30973098
border: 1px solid var(--border-light);
3098-
border-top-color: rgba(255,255,255,0.08);
3099+
border-bottom-color: rgba(255,255,255,0.08);
30993100
border-radius: var(--r-md);
3100-
padding: 12px 16px;
3101+
padding: 10px 20px;
31013102
font-size: 12px;
31023103
color: var(--text-primary);
3103-
box-shadow: var(--shadow-xl);
3104+
box-shadow: var(--shadow-lg);
31043105
z-index: 10000;
3105-
max-width: 300px;
3106-
animation: toast-slide-in 0.25s cubic-bezier(0.4, 0, 0.2, 1);
3106+
max-width: 360px;
3107+
animation: toast-slide-up 0.25s cubic-bezier(0.4, 0, 0.2, 1);
31073108
display: flex;
31083109
align-items: center;
31093110
gap: 10px;
31103111
backdrop-filter: blur(20px);
3112+
white-space: nowrap;
31113113
}
31123114
.toast-notification.success { border-left: 2px solid var(--neon-green, #00ff88); }
31133115
.toast-notification.error { border-left: 2px solid var(--neon-red, #ff0055); }
31143116
.toast-notification.info { border-left: 2px solid var(--neon-cyan, #00ffff); }
3115-
@keyframes toast-slide-in {
3116-
from { transform: translateX(100%); opacity: 0; }
3117-
to { transform: translateX(0); opacity: 1; }
3117+
@keyframes toast-slide-up {
3118+
from { transform: translateX(-50%) translateY(100%); opacity: 0; }
3119+
to { transform: translateX(-50%) translateY(0); opacity: 1; }
31183120
}
31193121
.toast-notification.fade-out {
31203122
animation: toast-fade-out 0.3s ease forwards;
31213123
}
31223124
@keyframes toast-fade-out {
3123-
to { transform: translateX(100%); opacity: 0; }
3125+
to { transform: translateX(-50%) translateY(100%); opacity: 0; }
31243126
}
31253127

31263128
/* ============================================================

extension/com.opencut.uxp/index.html

Lines changed: 1 addition & 1 deletion
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.7.1</span>
19+
<span class="oc-version">v1.7.2</span>
2020
</div>
2121
<div class="oc-header-right">
2222
<div class="oc-connection" id="connectionStatus" title="Backend connection status">

extension/com.opencut.uxp/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const BACKEND_DEFAULT = "http://127.0.0.1:5679";
2323
const BACKEND_MAX_PORT = 5689;
2424
const POLL_INTERVAL_MS = 1200;
2525
const HEALTH_CHECK_MS = 8000;
26-
const VERSION = "1.7.1";
26+
const VERSION = "1.7.2";
2727

2828
async function detectBackend() {
2929
// Try ports 5679-5689 like CEP panel does

0 commit comments

Comments
 (0)